首先我们准备一个简单的exe程序
准备程序:ida(到处都有,笔者用的ida7.8),patch(python3版本的),CRACKME.exe,HOLA_REVERSER.exe
我们使用HxD看一下
很明显,这就是32bit程序
如果是64bit则是
我们可以通过这个很简单的区分到底是32bit还是64bit
我们通过PE文件头分析
他是这样的
换成一个64bit的试试
这就是区别,所以我们可以直接区分这个文件到底是32bit或者是64bit程序,现在,我们知道这个程序是32bit,我们现在使用ida_x86进行调试分析
好了,现在开始调试分析
我们可以看到这个function name也就是函数名称
我们先从start函数看起
这儿就是他的主面板程序
也就是这个
往下,他有两个选项,一个直接退出程序,另一个选项是一个循环,他一直跳到loc_4010F1这个函数里边儿
如果选择选项loc_40111D直接ExitProcess,所以现在我们的主要功能点应该是在另一个点
我们无法从此处入手,所以我们先运行程序,看看这个程序是如何运行的
我们输入字符之后点击ok,返回结果
我们可以根据这个提示消息去寻找,他的执行逻辑便是,输入之后去判断,判断之后去返回一个字符串到页面上
所以我们先去找到这个定义这个字符串的区域
找到字符串
我们双击一下
跳转字符串定义的点
好的,我们看到了,这儿正好就有刚才我们注册失败返回值的变量aNoLuckThereMat,既然我们找到了这个地址空间,我们就去找找它在何处被引用,试着把它替换成Text或者干脆不显示出来
我们鼠标选中它,按下x
弹出引用点
它共有两处引用
我们挨着点
这一处是它的子程序,也就是我们主业务逻辑判断注册失败时调用它
双击一下
我们给他重命名为
添加颜色上去表示这是报错的页面
现在,我们找一下,这个子程序在哪儿被调用的
x一下,看看调用点
我分别给他添上了颜色
我们分析下他的这段汇编代码
cmp eax, ebx
jz short loc_40124c
当eax-ebx相减,结果保存在eax中,jz表示如果为0就跳转绿色的子程序,不然直接调用INF_ERROR
那么,我们直接给他改了
cmp eax,ebx
jnz short loc_40124c
我们保存一下Edit>patch program>apply patches to input file
我们会发现,它先弹出来一个这样的弹窗
然后提示成功
也就是说,它还存在一个判断
现在我们再去寻找这个判断点
我们对着这个字符串x一下
跳转第二个链接
现在这个更简单,我们想要让这个不跳转到loc_4013ac
cmp al,41h
jb short loc_4013ac
那么我们修改为
cmp al,al
jb short loc_4013ac
修改完成,保存一下
修改成功,它现在不会再弹出来一次noLuck了
我们接下来再看另一个程序
现在我们也是一样的方法,判断是32bit或者64bit
我们使用ida导入
我们找到print的信息,找找它在哪个地方被引用
我们分析下
jnz short loc_401094
跳转到输出错误信息,现在我们修改跳转输出成功信息
便是当结果为0则跳转
jz short loc_401094
只要结果不为0,那么就一直返回成功信息
保存一下,我们运行这个程序
是⑧是很简单?
关注十八线安服崽,后台回复 idacrack ,获取patch python3插件和实验所用exe程序
原文始发于微信公众号(深夜笔记本):从第一个crackme学习逆向
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论