分析trackme与reverseme

本文主要进行逆向分析,先对TrackMe.exe通过设置断点、调试等操作,处理死循环,修改指令完成测试;接着分析reverseme.exe,通过修改跳转指令得到成功结果并添加补丁。最后进行算法逆向,明确密钥文件字节数和字符条件,编写Keyfile.dat完成逆向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 分析trackme

打开TrackMe.exe
在这里插入图片描述
先通过F8调试,设置断点再重新调试,一步步的方式进行
设置第一个断点 00401469
在这里插入图片描述
再次设置新断点 00401015并重新调试
在这里插入图片描述
在此位置右侧注释出现window api函数:DialogBoxParamA

注:按下ALT+b 键可打开全部断点设置界面
在这里插入图片描述
快捷键:空格将所选断点激活或禁止
快捷键:delete 删除所选中的断点
点击上方字母C的按钮回到主界面

继续调试
在这里插入图片描述
继续设置断点
在这里插入图片描述
进入75BDCF后
出现连续不停的死循环无法找到新的断点

在调试界面使用CTRL ¬+G 查找GetDlgItemTextA
在这里插入图片描述
设置断点然后调试,跳出了对话框然后输入字符
在这里插入图片描述
继续进行调试,出现用户名

在这里插入图片描述在这里插入图片描述
在方框内的两个地址出现用户名和序列号

在这里插入图片描述
出现test和je的连用含义为如果eax==0的话就跳转到 0040122E
(test eax,eax为如果eax都为0则令Z=1,然后je判断条件为若Z=1则跳转)
此时有两种更改方式:修改Z的值和将test和je更改为nop
之前调试使用更改Z的值
本次使用修改指令
在这里插入图片描述
保存文件进行测试
在这里插入图片描述
成功

  • 分析reverseme

打开reverseme.exe
在这里插入图片描述
点击确定,exe结束
将exe拉入od
单步调试发现jnz跳转指令,同时jnz未跳转后为结束语句
在这里插入图片描述
查看jnz跳转条件
为 ZF=0
修改Z=0让命令跳转
在这里插入图片描述
继续调试
发现下一个jnz跳转,跳转未成功将进入jmp到失败的messagebox中

在这里插入图片描述在这里插入图片描述
则修改jnz,跳转实现
在这里插入图片描述
继续发现jl跳转
在这里插入图片描述
默认jl为跳转,查表得知jl跳转的条件为:S!=O
修改使得不能跳转至结束
继续调试
在这里插入图片描述
Jl跳转至失败结束,同理修改
继续调试得到成功结果
在这里插入图片描述
在这里插入图片描述
了解大致运行规律开始添加补丁
修改第一处跳转为jmp
在这里插入图片描述
修改第二处为jmp
在这里插入图片描述
修改第三处使其不跳转
在这里插入图片描述
修改最后一处使其不跳转
在这里插入图片描述
保存修改的部分
打开修改后的文件
在这里插入图片描述
运行成功
接下来进行算法逆向
前两个进行跳转,第三个进行不跳转
找到算法
在这里插入图片描述
Cmp比较402173处的值是否等于0x10=16
查看402173
在这里插入图片描述
为第四个参数
LPDWORD lpNumberOfBytesRead,指向一个DWORD类型变量的指针,用来接收读取的字节数。如果下一个参数为NULL,那么一定要传入这个参数。
当运行在cmp时,C=S=0
在这里插入图片描述
运行在下一步jl比较时
在这里插入图片描述
即cmp 判断密匙文件中的字节数与16相减(cmp命令实质是将操作数1减操作数2,通过比较计算后的OF(溢出位),SF(最高位二进制字符,正数为0,负数为1)
可以得知若密匙文件字节数小于16时候,相减后值为负数,没有溢出故OF=0.SF=1。不让jl跳转至失败语句,则应密钥字节数大于等于16
接下来进行下一步判断,可以将其看作一个循环体。
循环体的目的是检测密钥文件的字符ACSII码序号和字符个数
在这里插入图片描述
0) EBX与ESI寄存器之前已经置0
1) 将文件字符用mov指令移动到al
2) 比较al的ACSII序号和0的,若为0则ZF=1进行je跳转至
在这里插入图片描述
3) 使用cmp指令判断文件字符是否等于0x47=‘G’(ACSII),若不于则令jnz指令不跳转
在这里插入图片描述
4) 自增ESI与EBX
5) Jmp跳转为1)
在这里插入图片描述
……
直到所有字符都被判断剩下最后一个字符‘0‘
跳转至cmp比较ESI是否大于8,也就是循环是否进行8次以上
6) 完成以上条件,ESI大于等于8,jl跳转不成立,jmp跳转至成功处
在这里插入图片描述

编写Keyfile.dat 内容为16个字符G
在这里插入图片描述
完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值