攻防世界[EASYHOOK]

在主函数判断出主要函数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?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值