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


在main函数这里就发现少了东西
再右侧的函数列表中即可找到解密的关键函数 但是在main函数总未进行调用 使得动态调试直接结束 这两个加密函数都是rc4 但是有一个是魔改的
进入main函数的汇编窗口

使用keypatch插件进行修改

call before_main
call after_main

没用的直接nop 按c转

此时出现了
main endp ; sp-analysis failed



会再这里找到问题所在

alt+k 修改即可

将修改后的程序保存

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

魔改的rc4 将原来的异或修改为了-
提取寄存器
import idaapi
# 假设我们有一个eax的值
val = idaapi.get_reg_val("edx")
print(hex(val),end=',')
目的:得到减少的值 对着比较的字符串加回去完成解密


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

输入足够长的字符串

得到寄存器值
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的特性 我们可以通过修改传参配合修改点汇编进行解密

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

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



修改汇编

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

修改完成 保存即可

照样瞎输 修改了传参输入什么都没用了
再次进入cipher的内存空间就直接看见flag了
附件
通过网盘分享的文件:Reverse1的附件.zip
链接: https://pan.baidu.com/s/1x-xS-JbLx6oYooYzYDk3Hw 提取码: 56i4
--来自百度网盘超级会员v3的分享
浙公网安备 33010602011771号