ida中的idc作为类似c语言的脚本语言,非常好用。
使用学习方法参考。ida权威指南-扩展ida的功能
写段代码,使用idc进行求解
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int mew(char *buff)
{
int i;
int flag[11] = { 126, 118, 100, 76, 96, 124, 76, 112, 124, 124, 127};
for (i = 0; i < 11; i++)
{
if (buff[i] != flag[i])
{
printf("wrong");
return -1;
}
else{
printf("1 ~");
}
}
return 0;
}
int main()
{
char buff[12];
int i;
memset(buff, 0, sizeof(char) * 12);
scanf_s("%s", buff, sizeof(buff));
for (i = 0; i < 11; i++) {
buff[i] = buff[i] ^ 0x13; // flag is : mew_so_cool
}
mew(buff);
return 0;
}
图片.png
ida载入发现11个数据,有八个数据使用了xmm0寄存器取出
图片.pngxmm0是128位寄存器,16字节
所以每次从此处每个数据大小为4字节
使用Dword 从虚拟地址每次取出一个双字值
这11个数据需要分两次取出,注意小端序
auto from1 = 0x00402150;
auto from2 = 0x00402140;
auto i, x;
for(i = 0; i < 4; i++){
x = Dword(from1);
Message("%s", x ^ 0x13); //类似printf函数
from1 = from1 + 4;
}
for(i = 0; i < 4; i++){
x = Dword(from2);
Message("%s", x ^ 0x13);
from2 = from2 + 4;
}
Message("%s", 0x1D^0x42);
Message("%s", 0x01^0x42);
图片.png
使用idc是去掉注释,idc不支持“//”的方法
图片.png之后在命令框输入脚本
图片.png后续使用idc对程序的去花进行分析
网友评论