首页
社区
课程
招聘
[原创]初入看雪:我的第一个crackme(无壳程序)讲解
发表于: 2020-6-28 20:01 4091

[原创]初入看雪:我的第一个crackme(无壳程序)讲解

2020-6-28 20:01
4091

运行程序后,显示如下的图片
开始运行程序的提示
点击确定之后,显示如下的图片
点击确定后显示的相应图片
这里我们首先想要将第一个窗口:Get rid of all Nags and find the right registration code!该窗口的内容进行去除掉
这里首先我们将所有的rtcMsgBox打上断点的标记
断点标记图片
紧接着我们对程序进行运行,发现如图所示的位置调用api之后会显示相应的窗口的标记
调用api的图片
1.第一次尝试:
将00402CFE位置的程序改为add esp,14,nop,nop指令
修改之后发现程序无法正常运行
原因:调用api之后会有相应的返回值,返回值会存入相应的寄存器之中,但是将call <jmp.&MSVBVM50.#595>修改之后调用rtcMessageBox的返回值未能正确的存储在寄存器之中,所以此种方法行不通
2.第二次尝试-
我们向上寻找,去找寻程序的入口位置,发现程序的入口位置在如图所示的地方
程序的入口位置
标记断点后,再次重复运行程序,当程序运行到如图所示的入口地址位置时
程序运行到入口位置
观察栈中的相应内容
栈中的相应内容
由于返回地址会压入栈中,所以此时可以看到栈的返回地址为7401E5A9
也就是说运行完程序之后会返回7401E5A9的地址,这里我们为了找出运行该程序之前栈中的情况,在7401E5A9前面的7401E5A7地址处打上断点
在前面的位置处打上断点
(在运行完程序的这一句打上断点,否则这里不知道为什么断点打不上去,如果有大佬请指教下)
再次运行到地址为7401E5A7处的call eax语句的时候,按f7进入该程序之中运行,可以看到运行的为图中所示的语句
运行描述
由于程序运行采用的是stdcall的调用方式,所以栈由被调用者负责清理,这里的sub dword ptr ss:[esp+4],33可以看出栈顶有4自己的数据,所以将起始位置的代码改为retn 4(retn4 4 相当于pop ip,add sp, 4,也就是在返回的同时释放了参数使用的栈空间,windows api中常见的stdcall就是这种调用形式,所以省去了函数调用外的一条add指令)
修改汇编代码的图片
此时再次运行相应的程序,会发现开始的那个烦人的窗口被去除掉了

此时我们尝试着去输入相应的密码,这里我们输入abcd123进行尝试
输入密码图片
发现弹出相应的窗口
弹出密码图片
查找到相应的字符串,并在相应位置打上断点
图片描述
运行到相应位置的时候,往上稍微移动即找出正确的字符串
图片描述


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-6-28 21:05 被mb_eiksswhr编辑 ,原因:
上传的附件:
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 4381
活跃值: (4373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
I'mlena151
2020-6-28 20:26
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
鼓励一下,加油!
2020-6-28 20:38
1
雪    币: 492
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢版主大佬
2020-6-28 21:06
0
雪    币: 7121
活跃值: (125793)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
非常感谢楼主分享
2020-6-29 08:53
0
游客
登录 | 注册 方可回帖
返回
//