hackme 【攻防世界】Reverse
题目:

丢到PE里, 无壳,64bit

丢到IDA里,shift+F12,查看字符串,找到一个很可疑的字符串

跟进去看看,找到目标函数,我另外搜索了一下,没有mian函数,sub_400F8E应该就是解题的关键函数
有部分变量我修改的名字,为了方便理解
1 __int64 __fastcall sub_400F8E(__int64 a1, int a2, int a3, int a4, int a5, int a6)
2 {
3 int v6; // edx
4 int v7; // ecx
5 int v8; // r8d
6 int v9; // r9d
7 int v10; // ecx
8 int v11; // r8d
9 int v12; // r9d
10 char v14; // [rsp+0h] [rbp-C0h]
11 char v15; // [rsp+0h] [rbp-C0h]
12 char input[136]; // [rsp+10h] [rbp-B0h] BYREF
13 int v17; // [rsp+98h] [rbp-28h]
14 char v18; // [rsp+9Fh] [rbp-21h]
15 int v19; // [rsp+A0h] [rbp-20h]
16 unsigned __int8 input_1; // [rsp+A6h] [rbp-1Ah]
17 char key; // [rsp+A7h] [rbp-19h]
18 int v22; // [rsp+A8h] [rbp-18h]
19 int v23; // [rsp+ACh] [rbp-14h]
20 int v24; // [rsp+B0h] [rbp-10h]
21 int v25; // [rsp+B4h] [rbp-Ch]
22 _BOOL4 bool_type; // [rsp+B8h] [rbp-8h]
23 int i; // [rsp+BCh] [rbp-4h]
24
25 sub_407470((unsigned int)"Give me the password: ", a2, a3, a4, a5, a6, a2);
26 sub_4075A0((unsigned int)"%s", (unsigned int)input, v6, v7, v8, v9, v14);
27 for ( i = 0; input[i]; ++i )
28 ;
29 bool_type = i == 22; // 下面要打印Congras,那if里面的bool_type必须为1
30 // i=22
31 v25 = 10;
32 do
33 {
34 v10 = (int)sub_406D90() % 22; // v10的范围0~21
35 v22 = v10;
36 v24 = 0;
37 key = byte_6B4270[v10];
38 input_1 = input[v10];
39 v19 = v10 + 1;
40 v23 = 0;
41 while ( v23 < v19 )
42 {
43 ++v23;
44 v24 = 1828812941 * v24 + 12345;
45 }
46 v18 = v24 ^ input_1;
47 if ( key != ((unsigned __int8)v24 ^ input_1) )
48 bool_type = 0;
49 --v25;
50 }
51 while ( v25 );
52 if ( bool_type )
53 v17 = sub_407470((unsigned int)"Congras\n", (unsigned int)input, v24, v10, v11, v12, v15);
54 else
55 v17 = sub_407470((unsigned int)"Oh no!\n", (unsigned int)input, v24, v10, v11, v12, v15);
56 return 0LL;
57 }
- sub_407470((unsigned int)"Give me the password: ", a2, a3, a4, a5, a6, a2); sub_4075A0((unsigned int)"%s", (unsigned int)input, v6, v7, v8, v9, v14);我一开始猜测是输出输入用的,预防万一后面查了资料,就是根据C语言函数可变参数的特性反汇编出来的,就是普通输出输入函数
至于为什么五个变量就第一个我修改了名称————是看后面代码,通过个人理解,推出是输入量。 v10 = (int)sub_406D90() % 22;可以得知v10的范围是0~21,`sub_406D90`点进去跟踪,我没有得到什么有用的东西,大佬说`v10`是一个随机数,范围也的确是0 ~ 21,但是不是顺序来取值的——就算不知道`v10`的具体数值,但是肯定是0~21中的一个,写逆向脚本的时候遍历也是可以得出的。
- key = byte_6B4270[v10];双击byte_6B4270得到一串东西,应该是关键字符串了,结合上面可以理解为:`v10`是一个随机的下标,根据下标从`byte_6B4270`中随机抽取一个放到`key`里面
- input_1 = input[v10];在输入中随机抽取一个放到`input_1`里面,方便后面的异或操作
while ( v23 < v19 ){++v23;v24 = 1828812941 * v24 + 12345;}v18 = v24 ^ input_1这就是变换的关键部分了。经过加法乘法异或一系列操作,得到`v18`
- if ( key != ((unsigned __int8)v24 ^ input_1) )这个if的作用就是检查变换后得出的`v18`与`key`是否相等
解题脚本
1 key = [95,242,94,139,78,14,163,170,199,147,129,61,95,116,163,9,145,43,73,40,147,103]
2 flag = ""
3
4 for j in range(22):
5 v23 = 0
6 v24 = 0
7 v19 = j + 1
8 while v23 < v19:
9 v23 += 1
10 v24 = 1828812941 * v24 + 12345
11 flag += chr((v24 ^ key[j])&0xff)
12
13 print(flag)

flag: flag{d826e6926098ef46}
hackme 【攻防世界】Reverse的更多相关文章
- 攻防世界 reverse 进阶 10 Reverse Box
攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...
- 攻防世界 reverse evil
这是2017 ddctf的一道逆向题, 挑战:<恶意软件分析> 赛题背景: 员工小A收到了一封邮件,带一个文档附件,小A随手打开了附件.随后IT部门发现小A的电脑发出了异常网络访问请求,进 ...
- 攻防世界 reverse tt3441810
tt3441810 tinyctf-2014 附件给了一堆数据,将十六进制数据部分提取出来, flag应该隐藏在里面,(这算啥子re,) 保留可显示字符,然后去除填充字符(找规律 0.0) 处理脚本: ...
- 攻防世界 reverse 进阶 APK-逆向2
APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...
- 攻防世界 reverse hackme
hackme XCTF 3rd-GCTF-2017 __int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; / ...
- 攻防世界 reverse Windows_Reverse2
Windows_Reverse2 2019_DDCTF 查壳: 寻找oep-->dump-->iat修复 便可成功脱壳 int __cdecl main(int argc, con ...
- 攻防世界 reverse BabyXor
BabyXor 2019_UNCTF 查壳 脱壳 dump 脱壳后 IDA静态分析 int main_0() { void *v0; // eax int v1; // ST5C_4 char ...
- 攻防世界 reverse parallel-comparator-200
parallel-comparator-200 school-ctf-winter-2015 https://github.com/ctfs/write-ups-2015/tree/master/sc ...
- 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017
8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...
- 攻防世界 reverse easy_Maze
easy_Maze 从题目可得知是简单的迷宫问题 int __cdecl main(int argc, const char **argv, const char **envp) { __int64 ...
随机推荐
- NC15033 小G有一个大树
题目链接 题目 题目描述 小G想要把自己家院子里的橘子树搬到家门口(QAQ..就当小G是大力水手吧) 可是小G是个平衡性灰常灰常差的人,他想找到一个这个橘子树的平衡点. 怎么描述这棵树呢...就把它看 ...
- Java图片加水印
采用Java自带的Image IO 废话不多说,上菜 1. 文字水印 1 import sun.font.FontDesignMetrics; 2 3 import javax.imageio.Im ...
- React闭包陷阱
React闭包陷阱 React Hooks是React 16.8引入的一个新特性,其出现让React的函数组件也能够拥有状态和生命周期方法,其优势在于可以让我们在不编写类组件的情况下,更细粒度地复用状 ...
- Working with Dates in PL/SQL(PL/SQL中使用日期)
Working with Dates in PL/SQL By Steven Feuerstein 史蒂芬.佛伊尔斯坦 The previous articles in this introduct ...
- acm交互题
1.Dragon Balls 根据勾股定理把所有整数点都给求解出来,然后依次询问,注意数据范围 暴力求解,把每次可能的值都求出来,然后逐个比较. #include<bits/stdc++.h&g ...
- android:加载PDF几种方法汇总对比
在安卓项目中,加载PDF文件,是一个比较常见的需求.又分为两大类, 1.加载网络PDF 2.加载一个本地静态PDF. 查阅资料,纵观网上在安卓中打开PDF的各种方式,大致可以分为以下几类, 1.直接使 ...
- 本地配置静态ip和dns及虚拟机
- 安装SQL Server 具有不支持的属性(Compressed)集。
安装sqlserver 2014报错信息 D:\Program Files\Microsoft SQL Server 具有不支持的属性(Compressed)集.请通过使用文件夹属性对话框从该文件夹中 ...
- OPPO 自研大规模知识图谱及其在数智工程中的应用
导读:OPPO 知识图谱是 OPPO 数智工程系统小布助手团队主导.多团队协作建设的自研大规模通用知识图谱,目前已达到数亿实体和数十亿三元组的规模,主要落地在小布助手知识问答.电商搜索等场景. 本文主 ...
- PHP项目&变量覆盖&反序列化&未授权访问&身份验证
CNVD拿1day-验证&未授权-xhcms&Bosscms 此种漏洞由于没有什么关键函数,所以需要通过功能点去进行测试. Bosscms未授权访问 CNVD官网上搜索Bosscms未 ...