在主函数判断出主要函数hook和后面需要返回1
加载了被hook函数writefile函数地址和计算了偏移量,最后调用和返回的函数是安装hook。同时在这里也确定了目标函数(flag加密函数),这里通过目标函数和被hook函数的偏移量和jmp实现。
成功改变进程,hook了目标函数和最后恢复hook原始进程,重新调用writefile函数
找到真正的加密,逻辑很简单,稍微注意一下最后的 *(i + a1) = i ^ key;是else之外的,都会执行。这里记住之前的需要返回1.
EXP
#include <stdio.h>
int main() {
char i;
unsigned char a1[] = {
0x61, 0x6A, 0x79, 0x67, 0x6B, 0x46, 0x6D, 0x2E, 0x7F, 0x5F,
0x7E, 0x2D, 0x53, 0x56, 0x7B, 0x38, 0x6D, 0x4C, 0x6E, 0x00
};
unsigned char a2[20]={0};
a1[18] ^= 0x13;
for (i = 0; i < 18; i++) {
if (i % 2) { // 奇数索引
a2[i] = (a1[i] ^ i )+ i;
} else { // 偶数索引
a2[i + 2] = a1[i] ^ i;
}
}
for (int j=0 ;j<19; j++){
printf("%c", a2[j]);
}
return 0;
}
lag{Ho0k_w1th_Fun}
为什么会缺一位0.0?