victor8093 发表于 2017-11-15 18:04

新手逆向分析的160个练手程序第一个Acid burn

逆向的160个练手程序第一个Acid burn,先打开看看是什么样的

                              
双击打开程序,先是会出现一个NAG窗体,点击确定后才会进入到主要的注册页面



第一部分 逆向硬编码
我们先对序列号进行分析,即点击Serial。

输入假码点击Check it Baby后会出现一个失败的提示框。
那么我们导入OD,通过智能搜索,可以看到相关的字符串信息


双击过去,往上翻就可以看到关键跳,关键call的位置了


通过修改标志位或者修改跳转就可以实现暴力逆向,直接去关键call里分析也就可以知道真码,这个之后在分析。
这里换一个查找关键call的方式,我们可以注意到输入错误的注册码会有一个消息框出现,那么我们重新导入OD


通过转到表达式对MessageBoxA进行定位,到段首的位置设置一个断点后F9运行

这里需要注意的是,一开始会出现NAG窗体(这个后面会进行剔除)也是调用MessageBoxA,所以F9运行的时候需要注意到堆栈窗口中的信息是否是自己要的窗体


目前是在系统领空,那么执行到用户代码处,也就是系统领空,这时候会出现弹窗,也就是说我们的比较已经结束,返回的地址会在关键位置的下方。那么我们需要对代码进行跟随,对不重要的代码进行执行到返回,就能够查看到返回的地址。


往上拉就会看到相关的提示信息,很容易就能找到关键call 的位置。这时候右下键也会有一个Hello Dude!的可疑字符串,测试可知就是真码,当然也可以在关键call处设置一个断点,跟进去也很容易分析到。

第二部分 逆向软编码
采用智能搜索相关字符串信息从而进行关键跳的位置定位也是可以的。这里我们同样采用对MessageBoxA设置断点的方式进行定位。


这个提示的信息有所不同,在OD中导入,对MessageBoxA设置断点后F9运行,需要注意到堆栈信息窗口,看看是不是我们需要的窗体

执行到用户代码(ALT+F9)的位置,对没有用代码执行到返回(ctrl+F9),来到返回地址


往上拉就可以轻松的找到关键call,暴力逆向就只要修改关键跳即可。堆栈中也可以看到可疑字符串,进行测试可知就是真码。

那么接下来我们在返回位置的段首设置一个断点,查看序列号是如何计算出来的,这里为了跟原来的信息进行区分,修改下注册名跟注册码


点击Check it Baby!进入到返回地址进行代码分析


跟着代码一行一行的分析,可以看到真码的形成是先获取用户名的(用户名在这为xuepojie)第一个字符x,计算78(x的十六进制数)*29(十六进制数)*2=2670(十六进制数)转化为十进制数为9840。再加上固定的头CW-和固定的为-CRACKED,就是我们要的真码CW-9840-CRACKED。

第三部分 剔除NAG**** Hidden Message *****





Shark恒 发表于 2017-11-15 18:29

Serial部分应该跟一下比较位置。
算法部分分析的很精彩。
NAG很暴力的搞定了。

总的来讲,很好很好,加油~~

Oneness神 发表于 2017-11-15 20:00

第160个,太厉害了 {:5_189:}

victor8093 发表于 2017-11-15 20:02

Oneness神 发表于 2017-11-15 20:00
第160个,太厉害了

{:5_117:}是160个里的第一个,{:5_127:}这才刚开始呢

Oneness神 发表于 2017-11-15 20:05

victor8093 发表于 2017-11-15 20:02
是160个里的第一个,这才刚开始呢

{:5_121:}加油学,学成老司机带带我等小白

victor8093 发表于 2017-11-15 20:26

Oneness神 发表于 2017-11-15 20:05
加油学,学成老司机带带我等小白

互相学习,互相学习。

TT94186 发表于 2017-11-15 21:41

互相学习很好

syzh802618 发表于 2017-11-16 08:25

学习了,感谢楼主分享

insane 发表于 2017-11-16 08:46

小分送上。加油!~

Mrainer 发表于 2017-11-21 21:56

学习学习!早日脱坑
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 新手逆向的160个练手程序第一个Acid burn