VB程序破解中的一个问题
恒大及论坛的各位大神好!我正在学习160个Crackme,目前卡在了第17个程序上。 在OD中反编译代码,结合VB Decompiler的解析进行了注释,有如下代码:0040473A > \B8 01000000 mov eax,0x1 ;End If0040473F .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]