吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9867|回复: 23
收起左侧

[原创] 一个非常简单的C程序的逆向

  [复制链接]
老刘 发表于 2018-8-31 12:30
本帖最后由 老刘 于 2018-8-31 12:53 编辑

文件名:ReverseMe01_By@XiaoMing.exe
大小:17,859字节
Md5:FD57FCD3A3DE6D14BF2E1614814C289C
下载:
https://www.lanzouj.com/i1rbaaj
作者:小茗
作者要求:
1、求出使程序退出的方法
2、求出程序ExitCode的基本计算方法


查壳
1.png

发现无壳、PEiD语言检测为FreeBasic
逆向
程序跑起,发现为一个Console程序,无回显。
按字母,无回显,按方向键,有如下回显:

Cols=[128] Lines=[32]


熟悉CMD的都知道这是Console缓冲区的每行字符数(类似宽)和行数(类似高)。
无进展,关闭程序。
拖入IDA,查看导入表

2.png
发现有大量C函数调用,可知程序是C程序。
找到刚才回显的的字符串,

5.png
还发现了2个可疑的字符串(疑似窗口大小设置的CMD命令),
查找回显字符串的Xref,定位到sub_40138C,
由于程序没有加壳,再按运行流程分析下,
入口如下:

3.png
进入sub_4011E0,
4.png
由Call __p__environ可知其上的代码为初始化代码
由最后四条指令可知sub_40138C执行完后就退出,且其返回的Eax最终作为ExitCode,
种种迹象表面sub_40138C为(对逆向来说有意义的)代码区域,
进入sub_40138C,按作者的要求来直接找ret/retn,很快找到

6.png
可知返回条件为var_8>0x7E,且顺便发现了有关ExitCode的计算指令,
ExitCode的计算涉及到var_8、var_4,var_10
经过查找,修改var_10的只有这一处:

7.png
可知var_10为随机分配的内存地址,
修改var_4的有两处:

8.png
9.png
可知var_4为_getch函数的返回值,即用户按下的键值,
修改var_8的有两处,

10.png
11.png
分别对var_8进行减1和加1操作,顺便得知var_8为CMD的行数(Lines),
而var_8的初始值可以从最初打开程序按下小键盘上下左右的回显来得知,也可以从该sub的初始化处得知,为32。

12.png
而我们的目的之一就是让var_8>0x7E,而var_8最初=0x20<0x7E,所以我们定位到让var_8加1的函数快,进而定位到loc_40143D,想进入使var_8加1的函数块,var_4必须等于0x91,查找键值表后发现为Ctrl+下键,
那么第一个问题解决了,方法就是按住Ctrl+下直到Lines>0x7E,程序退出。
第二个问题我们要回到涉及到退出的代码附近,
易得ExitCode=(var_8&var_4)+var_10,
因为要使程序退出,最后一个键按下的肯定是ctrl+下,可确定var_4的末值为0x91,
而因为对于var_8仅有+1和-1两种操作,固退出时var_8=0x7f,
所以
ExitCode=(var_8&var_4)+var_10=(0x7f&0x91)+随机分配的内存地址
即0x11+随机分配的内存地址。

免费评分

参与人数 12威望 +1 吾爱币 +23 热心值 +9 收起 理由
Hmily + 1 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lookerJ + 1 用心讨论,共获提升!
wangdanq + 1 + 1 谢谢@Thanks!
qaz003 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hezhewangdao + 1 热心回复!
1000Y + 1 用心讨论,共获提升!
Darren-Wu + 1 用心讨论,共获提升!
喻浪 + 1 + 1 热心回复!
小菜鸟一枚 + 1 + 1 用心讨论,共获提升!
CrazyNut + 2 + 1 用心讨论,共获提升!
tlf + 1 + 1 热心回复!
610100 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 老刘 发表于 2018-9-1 12:58
本帖最后由 老刘 于 2018-9-1 13:00 编辑
hbgz518 发表于 2018-9-1 11:52
请教楼主那个流程图是用的什么软件?

IDA啊(很出名的软件,居然还有人不知道)
x64Dbg、BinaryNinja也支持流程图

文章里也提到了,自动被加了超链接
hbgz518 发表于 2018-9-2 09:50
老刘 发表于 2018-9-1 12:58
IDA啊(很出名的软件,居然还有人不知道)
x64Dbg、BinaryNinja也支持流程图

刚刚接触,见笑了,问完也去搜了一下,要学的东西很多,慢慢来吧
hlrlqy 发表于 2018-12-17 12:46
拉皮条的小顾 发表于 2018-10-9 21:48
非常好感谢楼主分享教程
52896009 发表于 2018-10-9 19:45
收藏使用一下
gongyuchang 发表于 2018-9-13 08:33
支持楼主,谢谢共享
gongyanming 发表于 2018-9-8 09:50
刚刚接触,要学的东西很多,慢慢来吧
heang567 发表于 2018-9-4 11:04
支持楼主,谢谢共享
yunyingfengxin 发表于 2018-9-3 08:00

感谢分享教程,可以来学习一下
linuxprobe 发表于 2018-9-2 20:35
确实简单,但需要手工操作,很麻烦。
明明是我先 发表于 2018-9-2 10:30
感谢分享教程,可以来学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表