bygeeee

导航

ida调用未调用的函数 修改传参 修改汇编 keypatch实现 main endp ; sp-analysis failed 读取寄存器

调用未引用的函数

fig:

fig:

在main函数这里就发现少了东西

再右侧的函数列表中即可找到解密的关键函数 但是在main函数总未进行调用 使得动态调试直接结束 这两个加密函数都是rc4 但是有一个是魔改的

进入main函数的汇编窗口

fig:

使用keypatch插件进行修改

fig:

call before_main
call after_main

fig:

没用的直接nop 按c转

fig:

此时出现了

main endp ; sp-analysis failed

fig:

fig:

fig:

会再这里找到问题所在

fig:

alt+k 修改即可

fig:

将修改后的程序保存

fig:

成功将未调用的函数添加到main函数中

解题

fig:

魔改的rc4 将原来的异或修改为了-

提取寄存器

import idaapi

# 假设我们有一个eax的值
val = idaapi.get_reg_val("edx")
print(hex(val),end=',')

目的:得到减少的值 对着比较的字符串加回去完成解密

fig:

fig:

如上 edx要改为需要读取的寄存器

调试

fig:

输入足够长的字符串

fig:

得到寄存器值

data=[0x4E, 0x47, 0x38, 0x47, 0x62, 0x0A, 0x79, 0x6A, 0x03, 0x66,
0xC0, 0x69, 0x8D, 0x1C, 0x84, 0x0F, 0x54, 0x4A, 0x3B, 0x08,
0xE3, 0x30, 0x4F, 0xB9, 0x6C, 0xAB, 0x36, 0x24, 0x52, 0x81,
0xCF]
enc=[0x18,0x25,0x29,0x20,0x19,0x27,0xb9,0xc9,0x34,0xc7,0x71,0xc9,0xac,0x17,0xb4,0x1e,0xe5,0xe9,0xfc,0x2a,0x4a,0x1,0xea,0x79,0xc7,0x82,0xfe,0x51,0xe7,0xb1,0xae,0x28,0x15,0xac]
for i in range(len(data)):
print(chr((data[i]+enc[i])%128),end="")
print(len("flag{1237-12938-9372-1923-4u92}"))

得到脚本

修改传参

因为rc4的特性 我们可以通过修改传参配合修改点汇编进行解密

fig:

除了最后一个比较的不改 剩下的flag都改为cipher

keypatch

fig:

函数前面的lea一般就是传的参数(部分ida会带keypatch插件 没用的建议搜搜)

fig:

fig:

fig:

修改汇编

fig:

将最后的-改为+ 减的汇编是sub加的是add

fig:

修改完成 保存即可

fig:

照样瞎输 修改了传参输入什么都没用了

再次进入cipher的内存空间就直接看见flag了

附件

通过网盘分享的文件:Reverse1的附件.zip
链接: https://pan.baidu.com/s/1x-xS-JbLx6oYooYzYDk3Hw 提取码: 56i4
--来自百度网盘超级会员v3的分享

posted on 2024-11-10 21:33  bygeeee  阅读(520)  评论(0)    收藏  举报