加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2009-01-01 10:50:39)
标签:

电脑

crack

对话框

api函数

av

it

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

找到主程序,用PEID查看加壳情况,果然,UPX壳:
BlackHat之路第一期:记一次小小的“Crack”

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

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

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

继续跟几步,看看程序在哪里调用了对话框,可是刚走了几步,发现一个有趣的现象:
BlackHat之路第一期:记一次小小的“Crack”

哈哈,原来主程序只是一个加载的作用,通过API函数ShellExecuteA来启动真正的程序。
好,找到真正的程序,PEID打开,依然是UPX壳,继续搜索POPAD,顺利脱壳。
由于联想到对话框上有提示是否升级的文字,所以小AV是否可以通过IDA或者Bintext来查找该文字,进而找到对话框调用的位置。但是试了之后,失败-__-

调试是需要思维扩散的,小AV深谙此道,哈哈,这不,突然想到既然是对话框,那肯定会调用MessageBox这个API函数,好,就这么办。
按Ctrl+G,输入MessageBoxA,发现果然找到:
BlackHat之路第一期:记一次小小的“Crack”

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

保存修改后的程序:
BlackHat之路第一期:记一次小小的“Crack”

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

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

Jason Zhou

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有