海天一色001 发表于 2018-3-13 17:00

VB程序破解中的一个问题

恒大及论坛的各位大神好!我正在学习160个Crackme,目前卡在了第17个程序上。  在OD中反编译代码,结合VB Decompiler的解析进行了注释,有如下代码:0040473A   > \B8 01000000   mov eax,0x1                                    ;End If
0040473F   .8D95 48FFFFFF lea edx,dword ptr ss:                ;eax=1
00404745   .8985 50FFFFFF mov dword ptr ss:,eax                ;var_B0 = 1
0040474B   .8985 30FFFFFF mov dword ptr ss:,eax                ;var_D0 = 1
00404751   .8985 00FFFFFF mov dword ptr ss:,eax               ;var_100 = 1
00404757   .8D45 94       lea eax,dword ptr ss:
0040475A   .B9 02000000   mov ecx,0x2                                    ;ecx=2
0040475F   .52            push edx
00404760   .50            push eax
00404761   .898D 48FFFFFF mov dword ptr ss:,ecx                ;var_B8 = 2
00404767   .898D 28FFFFFF mov dword ptr ss:,ecx                ;var_D8 = 2
0040476D   .898D F8FEFFFF mov dword ptr ss:,ecx               ;var_108 = 2
00404773   .FF15 C4104000 call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]   ;var_ret_1 = CLng(var_6C)/////eax=1
00404779   .8B8D 7CFFFFFF mov ecx,dword ptr ss:                ;ecx=假码///eax=n
0040477F   .8B3D 54104000 mov edi,dword ptr ds:[<&MSVBVM60.#631>]      ;msvbvm60.rtcMidCharBstr
00404785   .50            push eax
00404786   .51            push ecx
00404787   .FFD7          call edi                                       ;eax=假码字符串中的第n个(n为第n次循环的当次)///edx=2,ecx=0; <&MSVBVM60.#631>
00404789   .8BD0          mov edx,eax                                    ;edx=eax
0040478B   .8D8D 74FFFFFF lea ecx,dword ptr ss:
00404791   .FFD3          call ebx                                       ;var_8C = Mid$(var_84, var_ret_1, var_B8)//var_8C="1"?
在最后一行的00404791处,我按照注释的内容进行取值,应该是mid(假码,1,2),也就是说从假码的第1个字符开始取两个字符,但我从寄存器中看到的却是只取了第1个字符!继续向下到004047CC处,此时的var_90 = Mid$(var_88,var_ret_2, 1)= var_90 = Mid((假码,2,1),从从寄存器中看到的是取了第2个字符,结果是正确的。004047CC   .FFD3          call ebx                                       ;var_90 = Mid$(var_88, var_ret_2, 1)="2"请教,我是什么地方出错了?
页: [1]
查看完整版本: VB程序逆向中的一个问题