分析程序

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/