逆向破解基础系列(第二篇)

作者:SnowMzn

序言

本文是160个CrackMe逆向题的第二题和第三题的逆向分析,第三题是第二题的加强版,就放到一起做比较容易理解。

  • 这个程序没有Nag,只有Name/Serial。查壳,是VB的程序。
  • 放到OD里运行,在调用rtcMsgBox函数处下断点,随便输入Name和Serial,运行后程序断下来。
逆向破解基础系列(第二篇)插图1
  • 将代码往上翻,可以看到写敏感东西,断定这个函数就是关键函数。
  • 在这个函数开始的地方下断点,再次运行程序单步调试后就会发现Serial的算法。
逆向破解基础系列(第二篇)插图3
  • 主要算法就是,将Name的长度,乘上0x17CFB,再加上Name首字母的十进制ASCII码,加上固定的头AKA-。
  • python脚本:
name = raw_input("Please enter your name:") print AKA- + str(len(name) * 0x17CFB + ord(name[0]))

第三题

  • 这道题是第二题的加强版,程序加了个Nag,算法也做了更改。
  • 首先查壳,VB,没有壳。
  • 在去除Nag的时候还是遇到了点麻烦,毕竟不熟悉VB的程序。将程序放入OD里研究了许久,无果。。。。无奈查了下有关去除VB程序Nag窗口的资料,还是有捷径的。

1、去除Nag

第一种方法

  • 这种方法被称为4C法,用于去除VB程序的NAG很有效。
  • VB程序在入口处总有一个push指令
逆向破解基础系列(第二篇)插图5
  • 可以看到这里push的是0x4067D4,在数据窗口跟进这个地址。(从这里也可以看到这是VB程序)
逆向破解基础系列(第二篇)插图7
  • 然后开始4C法,在数据窗口跟进push的地址加上0x4C,也就是0x4067D4 + 0x4c
逆向破解基础系列(第二篇)插图9
  • 这个地方存放的是0x00406868,继续跟进,可以看到这是两块内容非常相似,每块占80个字节的长度。
逆向破解基础系列(第二篇)插图11
  • 两块内容只有一处不同,上面的是00,下面的是01。该标志指定了每块代码出现的顺序,先加载00,再加载01。根据程序运行的结果可以知道,上面的内容是NAG窗口的,下面的内容是主窗口。所以这里需要将两个标志的值颠倒一下就可以将NAG去除了。

第二种方法

  • 这种方法有点曲线救国的意思。
  • 首先将程序放入VBExplorer.exe中,查看窗口的Timer1属性
逆向破解基础系列(第二篇)插图13
  • 可以看到有个Interval字段,值是7000,16进制表示为0x1B58。这个值就是nag窗口显示的时长。
  • 将程序放入UE中,查找581B(小端存储)
逆向破解基础系列(第二篇)插图15
  • 在0x1B58前面可以看到Timer1字样,所以可以断定这里就是nag窗口的时间,将这里修改为0x001,就可以变相的去除nag窗口了。

2、Name/Serial

  • 去除烦人的Nag,可以安心的找Name/Serial了。和上面一样,在rtcMsgBox处下断点,运行程序。
  • 这里有个问题,就是总弹出这个东西,刚开始以为这就是输入错误验证码的提示,研究了半天才发现,Serial只能是数字,输入字母就会弹出这个错误。。。。很坑啊。。。
逆向破解基础系列(第二篇)插图17
  • 继续说rtcMsgBox,在serial处输入任意的数字后,程序断在rtcMsgBox处。向上翻代码会看到这样的东西。同样在这个函数开始的地方下断点。
逆向破解基础系列(第二篇)插图19
  • 同样从这个开始的地方单步调试,很容易发现关键算法。
逆向破解基础系列(第二篇)插图21
  • 这里的算法也是比较简单的,附上简单的python脚这里的算法也是比较简单的,附上简单的python脚本:
name = raw_input("Please enter your name:")
print (0x15B38 * len(name) + ord(name[0])) * 3 + 19

原创文章 逆向破解基础系列(第二篇),版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/202213286.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注