1625-5 王子昂 总结《2017年5月14日》 【连续第225天总结】
A. 加密与解密 IDC脚本的使用 100%
B. IDC可以用来通过处理代码提取或处理信息
一些特殊反汇编任务需要IDC的协助。
比如对代码段加密的程序,可以先用IDC先写一段解密的代码,解密后再进行反汇编
eg:
push ebp
mov ebp,esp
sub esp,8
call 401080
call 401060
xor eax,eax
mov esp,ebp
pop ebp
retn 10h
分析401060处的子程序发现没有意义
再分析401080,发现可以解密401060处的代码
mov eax,offset loc_#1060
mov bl,[eax]
xor bl, 1
mov [eax], bl
inc eax
cmp eax,00401074
jg short locret_401096
jmp short loc_401085
retn
这样的方法叫做SMC(Self Modifying Code)技术,即自己修改自己的代码。只有在程序运行时,才会由程序在某处运行一段还原代码来解密这段加密数据,再执行。
本段解密方法就是把每个数据与1做xor(异或)运算
使用IDC脚本的模拟解密代码为:
#include <idc.idc>
//from:解密代码起始地址,size:代码长度,key:此处值为1
static decrypc(from,size,key){
auto i,x;
for(i=0;i<size;i=i+1){
x=Byte(from);
x=(x^key);
PatchByte(from,x);
from=from+1;
}
}
单击菜单可以将这段代码载入IDA中,再打开IDC命令执行窗口,以十六进制形式输入命令decrypte(0x00401060,0x15,0x1); 即可
最后记得通知IDA重新分析这段代码
C. 明日计划
加密与解密 IDA
PYQT