hello, Fravia;)
some days ago i was to try  to do some crack ,
the program PhoneTax,from http://itsoft.icl.kazan.su/
the program seems to be intended for viewing databases from mini automatic thelephone stations
from Panasonic :calls ,times,phone numbers etc.
as it happens not so often the program was coded in VB 3.0 
if you do not know  it is 16-bit .
so i started my exploration of the target code.
all my expirience (not so big) was of no use.P-code of visual basic  is true mistery for me .
but i have Internet!some searching and i do  have two interesting things.
VB 3.0 decompiler and some tutoria from rassia about VB cracking.
The ways of cracking from the tutorial is good,but strange -cracking of interpreter dll .
So i desided to do some crack of target exe.
But what is the begining of the end which finishes the beginnig?
 i have decompiled the target and with simple text search found some fulish protection:


in module frmmain.bas

listing 1
*********************************
  .....
  Call sub097C(Me.hWnd, False)
L2A67E:
  If  Not fn09F0() Then
    If  fn0A11("Íàðóøåíà ëèöåíçèÿ!" & Chr$(10) & Chr$(13) & "Õîòèòå çàðåãåñòðèðîâàòüñÿ ?") = mc0086 Then
      If  fn09DE() Then
        GoTo L2A67E
      End If
    End If
    Call sub0801
    Unload Me
    Exit Sub
  End If
  Call sub1710
.......

********************************


in module module4.bas



listing 2
*******************************
....
Function fn09DE () As Integer
On Error Resume Next
    If  gv0326.M3874 <> 0 Then fn09DE = extfn1035(gv0326.M3874)
End Function

Function fn09F0 () As Integer
Dim l0238 As Integer
Dim l023A As Integer
Dim l023C As Integer
On Error Resume Next
l023A = True
l023C = False
    If  gv0326.M3874 <> 0 Then
      l0238 = extfn1043(gv0326.M3874)
      If  l0238 = gv0326.M3881 Then
        fn09F0 = l023A
      Else
        fn09F0 = l023C
      End If
    End If
End Function

Sub sub0A01 ()
Dim l0240 As String
Dim l0242 As String
Dim l0246 As String * 160
Dim l0248 As Integer
Dim l024A As String
On Error Resume Next
  gv038E = App.Path
  gv0392 = "ITSoft Phonetax"
  gv0456 = False
  gv0458 = False
  l0240 = fn08B2("intl", "sDecimal", "", "win.ini")
  l0242 = fn08B2("intl", "sThousand", "", "win.ini")
  gv044E = fn08B2("database", "patharc", "", "phonetax.ini")
  gv0452 = fn08B2("report", "path", "", "phonetax.ini")
  l0248 = extfn07D4(0, "PT~", 0, l0246)
  Kill l0246
*********************************************************
 
the weird symbols in 
    If  fn0A11("Íàðóøåíà ëèöåíçèÿ!" & Chr$(10) & Chr$(13) & "Õîòèòå çàðåãåñòðèðîâàòüñÿ ?") = 
are
    if  fn0A11("License violation!" & Chr$(10) & Chr$(13) & "Do you wanna to register?")
in russian language.
so we 'd easely crack the program ,if we know where the hell in the Phonetax.exe is the
function 

 fn09F0 () As Integer 

so ,let's begin to search.

 Some tecnical facts:
VB 3.0 is interpreter language, not a compiler, so  all strings are in the p-code in the order of usage.That is why i have inserted such a big piece of module4.bas.
so go to Hiew or other binary  editor and let us search for the strings:
"ITSoft Phonetax"
"intl"
"sDecimal" one not far from another.
ok, found  match 

.00073790:  45 49 9A 38-14 00 98 37-0F 00 49 54-53 6F 66 74  EIÚ8¶ Ø70 ITSoft
.000737A0:  20 50 68 6F-6E 65 74 61-78 00 FB 2D-A8 00 45 49   Phonetax v-è EI
.000737B0:  E2 37 55 2D-4C 02 45 49-E2 37 55 2D-4E 02 45 49  ò7U-LOEIò7U-NOEI
.000737C0:  B1 67 9A 38-0A 00 C8 37-04 00 69 6E-74 6C 00 00  -gÚ80 L7¦ intl
.000737D0:  63 6A 03 00-9A 38 0E 00-DA 37 08 00-73 44 65 63  cj¦ Ú8d -7• sDec
.000737E0:  69 6D 61 6C-00 00 63 6A-02 00 9A 38-06 00 F0 37  imal  cjO Ú8¦ ¨7
.000737F0:  00 00 00 00-63 6A 01 00-9A 38 0C 00-FE 37 07 00      cjO Ú8+ ¦7•
.00073800:  77 69 6E 2E-69 6E 69 00-63 6A 00 00-A7 62 04 00  win.ini cj  çb¦
.00073810:  0C 00 72 6A-04 00 00 00-9D 2F 40 02-45 49 B1 67  + rj¦   Ý/@OEI-g
.00073820:  9A 38 0A 00-26 38 04 00-69 6E 74 6C-00 00 63 6A  Ú80 &8¦ intl  cj
.00073830:  03 00 9A 38-0E 00 38 38-09 00 73 54-68 6F 75 73  ¦ Ú8d 880 sThous
.00073840:  61 6E 64 00-63 6A 02 00-9A 38 06 00-4E 38 00 00  and cjO Ú8¦ N8
.00073850:  00 00 63 6A-01 00 9A 38-0C 00 5C 38-07 00 77 69    cjO Ú8+ \8• wi
.00073860:  6E 2E 69 6E-69 00 63 6A-00 00 A7 62-04 00 0C 00  n.ini cj  çb¦ +
.00073870:  72 6A 04 00-00 00 9D 2F-42 02 45 49-B1 67 9A 38  rj¦   Ý/BOEI-gÚ8
.00073880:  0E 00 84 38-08 00 64 61-74 61 62 61-73 65 00 00  d Ä8• database
.00073890:  63 6A 03 00-9A 38 0C 00-9A 38 07 00-70 61 74 68  cj¦ Ú8+ Ú8• path
....


going some higher and found

.00073750:  1F 49 A5 2C-3A 02 3B 2F-36 02 2F 49-FE 35 6E 37  ¡Iå, O; 6O I¦5n7
.00073760:  1F 49 A5 2C-3C 02 3B 2F-36 02 2F 49-EC 35 35 49  ¡Iå,:O; 6O Iü55I
.00073770:  EC 35 4B 49-D9 65 5E 0E-5B 0E 4B 49-B6 7E FE FF  ü5KI-e^d[dKI¦~¦ 
.00073780:  45 49 A7 4A-A0 01 09 4C-02 C0 A3 10-FB 2D A6 00  EIçJàO0LOLã>v-æ
.00073790:  45 49 9A 38-14 00 98 37-0F 00 49 54-53 6F 66 74  EIÚ8¶ Ø70 ITSoft
.000737A0:  20 50 68 6F-6E 65 74 61-78 00 FB 2D-A8 00 45 49   Phonetax v-è EI
.000737B0:  E2 37 55 2D-4C 02 45 49-E2 37 55 2D-4E 02 45 49  ò7U-LOEIò7U-NOEI
.000737C0:  B1 67 9A 38-0A 00 C8 37-04 00 69 6E-74 6C 00 00  -gÚ80 L7¦ intl
.000737D0:  63 6A 03 00-9A 38 0E 00-DA 37 08 00-73 44 65 63  cj¦ Ú8d -7• sDec


guess what the highlightet simbols are? right,you are
remember?
  fn09F0 = l023A
      Else
  fn09F0 = l023C 

so  as lo23a=true then let as putch the code

.00073750:  1F 49 A5 2C-3A 02 3B 2F-36 02 2F 49-FE 35 6E 37  ¡Iå, O; 6O I¦5n7
.00073760:  1F 49 A5 2C-3A 02 3B 2F-36 02 2F 49-EC 35 35 49  ¡Iå,:O; 6O Iü55I

voila (as franchmen say(or almoust as))
no matter what the fextfn1043(gv0326.M3874) returns our func will return true.


as a reverse engineers ,what can we learn from the little crack?
local variables in VB have the pass-through numeration  for all module and the numbers are used 
in functions  in the clear way, without encoding.

Happy cracking!
Staier from http://staier.cjb.net (russan language site).
P.S Again, Fravia thanks for your work, keep up...



1