NSCTF-Reverse02 超级详细且简单的办法搞定

没有壳 VC写的

观察界面 一个编辑框 一个按钮

拖进IDA 在导入表里找到GetDlgItemTextA

为什么找这个函数 因为这个函数的作用就是 获取我们输入编辑框的内容

双击进入 ctrl+X 交叉引用,然后F5看伪C代码 就一个自定义函数 其他都是系统函数 我们直接进去

进去之后 发现就是把我们输入的值分成两队 分别和 4030XX 这一串对0xx7异或的值 和 对0x33比较

但是我们不管这么多,直接看后面,这个if,很敏感的感觉到 flag就藏在这个 401000()函数里面,所以我们在if这一行按下TAB

直接拿到这个if的地址 进入OD 操作 ctrl+G 到刚才if的地址 下断

跑起来,用这个灰色按钮克星激活 GetFlag 按钮, 按下按钮走到断点

发现 关键的比较 这不就是刚才判断 V2+V1==3 吗? 

这里的eax是1 当然和 3不相等,那我们改成cmp eax,1,1和1比较肯定一样鸭,所以不会跳转。 (这里把jnz直接改成jz也可以达到同样的效果)

 

继续单步 就得到了flag 全程不用做任何运算

 

这里再介绍下另外两种解法,就是通过计算得到flag。

第一种:

把byte_4030xx处的字符转换一下进制显示,byte_4030xx处字符分别为“JPFjXj2;9GWbN”

编写破解代码

#include <stdio.h>
 
int main()
{
    int i, j = 0;
    char str1[] = "JPFjXj2;9GWbN";
    char str2[20] = {0x00};
 
    for (i = 0; i <= 6; i++) {
        str2[j++] = str1[12-i] ^ 7;
    }
     
    for (i = 5; i >= 0; i--) {
        str2[j++] = str1[i] ^ 0x33;
    }
 
    printf("%s\n", str2);
 
    return 0;
}

把计算的结果填入编辑框 用按钮克星激活GetFlag按钮 就能得到flag了

第二种:

直接到这个解密函数 sub_401000 里面看看

 发现就是将 7e0cad17016b0>?45?f7c>0>4a>1c3a0 与0x7的异或操作

(解释下这里v4为什么等于这么多,Dst是已知的,位置是ebp-38h,v4的地址是ebp-29h,转为十进制后,两个差15位,所以左边的 flag:{NSCTF_md5 这十五位去掉就是v4的值)

提醒一下 “}” 这个的ASCII 就是125

用python写脚本,直接得到flag

a = "7e0cad17016b0>?45?f7c>0>4a>1c3a0"
out = ""
for i in a:
 out += chr(ord(i)^7)
print out

 

转载于:https://www.cnblogs.com/tqing/p/11507709.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值