吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1563|回复: 0

VB程序逆向中的一个问题

[复制链接]
海天一色001 发表于 2018-3-13 17:00 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


50HB
恒大及论坛的各位大神好!
我正在学习160个Crackme,目前卡在了第17个程序上。
  在OD中反编译代码,结合VB Decompiler的解析进行了注释,有如下代码:
[Asm] 纯文本查看 复制代码
0040473A   > \B8 01000000   mov eax,0x1                                    ;  End If
0040473F   .  8D95 48FFFFFF lea edx,dword ptr ss:[ebp-0xB8]                ;  eax=1
00404745   .  8985 50FFFFFF mov dword ptr ss:[ebp-0xB0],eax                ;  var_B0 = 1
0040474B   .  8985 30FFFFFF mov dword ptr ss:[ebp-0xD0],eax                ;  var_D0 = 1
00404751   .  8985 00FFFFFF mov dword ptr ss:[ebp-0x100],eax               ;  var_100 = 1
00404757   .  8D45 94       lea eax,dword ptr ss:[ebp-0x6C]
0040475A   .  B9 02000000   mov ecx,0x2                                    ;  ecx=2
0040475F   .  52            push edx
00404760   .  50            push eax
00404761   .  898D 48FFFFFF mov dword ptr ss:[ebp-0xB8],ecx                ;  var_B8 = 2
00404767   .  898D 28FFFFFF mov dword ptr ss:[ebp-0xD8],ecx                ;  var_D8 = 2
0040476D   .  898D F8FEFFFF mov dword ptr ss:[ebp-0x108],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:[ebp-0x84]                ;  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:[ebp-0x8C]
00404791   .  FFD3          call ebx                                       ;  var_8C = Mid$(var_84, var_ret_1, var_B8)//var_8C="1"?

在最后一行的00404791处,我按照注释的内容进行取值,应该是mid(假码,12),也就是说从假码的第1个字符开始取两个字符,但我从寄存器中看到的却是只取了第1个字符!
继续向下到004047CC处,此时的var_90 = Mid$(var_88,var_ret_2, 1)= var_90 = Mid((假码,21),从从寄存器中看到的是取了第2个字符,结果是正确的。
[Asm] 纯文本查看 复制代码
004047CC   .  FFD3          call ebx                                       ;  var_90 = Mid$(var_88, var_ret_2, 1)="2"
请教,我是什么地方出错了?

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表