BlackHat之路第一期:记一次小小的“Crack”

标签:
电脑crack对话框api函数avit |
分类: 研究探索 |
XX是我一直使用的一款记账本软件,但是由于该软件包含自动升级功能,所以每次都会弹出对话框确认我是否升级。我不想升级,所以每次都要去点,时间一长就觉得麻烦。正好最近在学习debug&crack,所以决定把这个讨厌的对话框去掉:

找到主程序,用PEID查看加壳情况,果然,UPX壳:

开始脱壳。根据以往的经验,UPX在脱壳之前都会有一个Popad,然后紧跟一个长跳转,之后便看到脱壳后的代码,所以为了加快速度,便直接搜索popad。
注:
push ebp
mov ebp,esp
add esp,??(或者sub esp,??)
这几行代码通常是stdcall函数调用的标志,前两句用来实现函数运行完后达到栈平衡,第三局是用来为函数分配栈空间。

脱壳之后:

继续跟几步,看看程序在哪里调用了对话框,可是刚走了几步,发现一个有趣的现象:

哈哈,原来主程序只是一个加载的作用,通过API函数ShellExecuteA来启动真正的程序。
好,找到真正的程序,PEID打开,依然是UPX壳,继续搜索POPAD,顺利脱壳。
由于联想到对话框上有提示是否升级的文字,所以小AV是否可以通过IDA或者Bintext来查找该文字,进而找到对话框调用的位置。但是试了之后,失败-__-
调试是需要思维扩散的,小AV深谙此道,哈哈,这不,突然想到既然是对话框,那肯定会调用MessageBox这个API函数,好,就这么办。
按Ctrl+G,输入MessageBoxA,发现果然找到:

由于程序里可能会调用很多对话框,所以不能断定这里就是小AV期望的那个,所以F2设下断点,F9运行,发现果然是这里:)好啦,开始Crack-___-
其实很简单,只要将这一行汇编代码改为NOP,即不调用MessageBoxA,那对话框就不会显示出来了。

保存修改后的程序:


好啦,下面运行我们“Crack”的程序,发现果然已经不弹提示升级的对话框啦,大功告成:)
Jason Zhou

找到主程序,用PEID查看加壳情况,果然,UPX壳:

开始脱壳。根据以往的经验,UPX在脱壳之前都会有一个Popad,然后紧跟一个长跳转,之后便看到脱壳后的代码,所以为了加快速度,便直接搜索popad。
注:
push ebp
mov ebp,esp
add esp,??(或者sub esp,??)
这几行代码通常是stdcall函数调用的标志,前两句用来实现函数运行完后达到栈平衡,第三局是用来为函数分配栈空间。

脱壳之后:

继续跟几步,看看程序在哪里调用了对话框,可是刚走了几步,发现一个有趣的现象:

哈哈,原来主程序只是一个加载的作用,通过API函数ShellExecuteA来启动真正的程序。
好,找到真正的程序,PEID打开,依然是UPX壳,继续搜索POPAD,顺利脱壳。
由于联想到对话框上有提示是否升级的文字,所以小AV是否可以通过IDA或者Bintext来查找该文字,进而找到对话框调用的位置。但是试了之后,失败-__-
调试是需要思维扩散的,小AV深谙此道,哈哈,这不,突然想到既然是对话框,那肯定会调用MessageBox这个API函数,好,就这么办。
按Ctrl+G,输入MessageBoxA,发现果然找到:

由于程序里可能会调用很多对话框,所以不能断定这里就是小AV期望的那个,所以F2设下断点,F9运行,发现果然是这里:)好啦,开始Crack-___-
其实很简单,只要将这一行汇编代码改为NOP,即不调用MessageBoxA,那对话框就不会显示出来了。

保存修改后的程序:


好啦,下面运行我们“Crack”的程序,发现果然已经不弹提示升级的对话框啦,大功告成:)
Jason Zhou