动态分析TraceMe.exe

      在学习《加密与解密第三版》时,由于运行环境是win10 64位系统,用OD打开TraceMe时出现诸如不显示程序窗口等问题都是因为OllyDbg在64位机上的bug导致的, 打开Log会发现无法处理的异常然后程序结束.
解决方法:安装Olly Advanced后在插件的Options->Additional  Options勾选x64  Compatiblity-mode

     
      首先示范下原软件,当输入错误用户名和序列号会弹出窗口报错。

      现在开始一个完整的的调试分析过程,取消开始设计的所有断点,在OD中按F9将TraceMe运行起来,输入用户名和序列号。



程序是ANSI编码,出现诸如此样式的对话框有两种可能函数,GetDlgItemTextA和GetWindowTextA,由于不知道程序具体调用了什么函数来处理字符,只好一个一个试。按Ctrl+G打开跟随表达式窗口,键入GetDlgItemTextA。(注:OD中对API的大小写敏感,输入函数名大小写必须正确)

来到USER32.DLL中的GetDlgItemTextA的函数入口处,并在此处按F2下断点。单击B按钮可查看。



单击程序的“Check”按钮,程序断在GetDlgItemTextA函数开始处。
在4011AE处下断点,以便反复调试。
按Alt+F9回到软件领空,发现是GetDlgItemTextA函数,紧接着还有一个,F8单步布过即可。

运行到4011CA处要注意了,跟踪esp+4,发现数据窗口右边字符出现了我的用户名“Antonia”。




由此可推断,下一行的test用来判断非空,cmp函数用来判断用户名字符长度是否小于5,再下面的俩个lea分别对应储存用户名的内存地址和你输的序列号,略过,call函数调用内存,F7步入。跟入后不难看出esp+18处存入的是用户名Antonia字符串长度并将其存放在edi中,之后ecx被赋值3,并与edi比较,也就说当用户名长度小于3则直接跳过,不执行算法并报错。

这个循环一股脑的在计算什么东西,目测就是序列号了

分析算法可得,循环跳过用户名的前3个字符,依次将字符的Ascii码与一段程序内的内存对应相乘,并且将结果累加到Esi

分析下各个寄存器的作用

EAX:程序内的内存指针,与ECX一同递增,每次与字符Ascii相乘,且运算完第8个数后循环回第一个数

ECX:用户名内存指针,跳过用户名前3个字符

BL:字符Ascii

DL:和字符Ascii相乘的Hex

ESI:结果存放

EDI就是字符串长度,判断是不是要继续循环

到这里算法分析就基本结束了

循环结束后,将Hex换成等价的十进制数,并与用户输入的进行对比,相同则成功。(关于这部分序列号的分析,本文参考了网络http://www.bathome.net/thread-44827-1-1.html)

     再次回到领空,发现只要4011F5一句不跳转即可注册成功,双击该行,输入指令NOP,这个指令机器码是90,此处用9090代替7437。


此时可见标志寄存器ZF取反。


现在随意输入用户名和序列号,这个TraceMe都会提示注册成功。但目前修改的只是内存中的数据,要是修改一直有效,就必须将修改写进磁盘文件中。



爆破成功!


     —————时二O一八年三月十四日晌午  by Snippers
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值