分析程序
7到8行代码运行时解密 judge函数
使用python脚本patch,file-->script command...
from idc_bc695 import * s = 0x600b00 for i in range(182): PatchByte(s + i, Byte(s+i)^0xc)
ida7.5版本需要加上from idc_bc695 import *,低于7.5版本的不需要加
执行脚本之后可见jugge处的数据改变,output window没有报错
光标指到600B00处,按c销毁已有汇编,再按p重新汇编
F5查看伪代码
或者
gdb elf文件名 disas main //查看main汇编 b *main+128 //下断点 r disas //查看解密出的judge汇编
写出解密代码
s=['66','6d','63','64','7f','6b','37','64','3b','56','60','3b','6e','70'] for i in range (len(s)): print(chr(int(s[i],16)^i),end='')
或者
#include <stdio.h> #include <string.h> int main(int argc,char* argv[]){ char v2[15] = {0}; char flag[15] = {0}; int i=0; strcat(v2, "fmcd"); v2[4] = 127; strcat(v2, "k7d;V`;np"); for ( i = 0; i <= 13; ++i ){ flag[i] = v2[i]^i; } printf("%s ",flag); return 0; }
在线代码运行:https://tool.lu/coderunner/