en,好熟悉,在哪里见过。再说,一串大字写着“VB5!6&vb6chs.dll”。对,这里就是脱壳点了。直接用OD脱之,修正后的OEP“7AA8”,要是脱壳后的程序没法运行,还要这个地址来修复IAT呢。
00407AA8 68 db 68 ; CHAR 'h'
00407AA9 807D4000 dd FAp.00407D80 ; ASCII "VB5!6&vb6chs.dll"
00407AAD E8 db E8
00407AAE EE db EE
00407AAF FF db FF
00407AB0 FF db FF
00407AB1 FF db FF
00407AB2 00 db 00
00407AB3 00 db 00
00407AB4 00 db 00
00407AB5 00 db 00
00407AB6 00 db 00
00407AB7 00 db 00
00407AB8 30 db 30 ; CHAR '0'
00407AB9 00 db 00
00407ABA 00005800 dd FAp.00580000
00407ABE 00004800 dd FAp.00480000
4。总结一下:
A.程序在用户输入注册码时,如果比较正确就会把注册码放入[HKEY_CURRENT_USER\Software\VB and VBA Program Settings\App_NameP\Registration]处。再程序启动时,会把从注册表里取出注册码,然后比较是否正确。很显然,程序只用一个地方判断注册码,太大意了。
B.后再沿着刚才改过的地方向上走,找到有一处是调用reg.dll的地方,跟踪发现,这个dll是为程序提供申请码和注册码的算法之内的东东。我还发现,这个申请码怎么这么熟悉,一想,哦,在我破解WinXp总管里见过,一样的嘛。哈哈,真是巧啦。
C.最后提供一个跟踪reg.dll时的一个地址。
0042A8D5 . 0BC0 or eax, eax ; Reg.DecryptStringFun1