攻防世界 reverse 进阶 1-4
1.dmd-50 suctf-2016

md5后比较,在线解md5得到:

md5(md5($pass)),所以将grape再进行MD5

b781cbb29054db12f88f08c6e161c199
2.Shuffle SECCON-CTF-2014

硬编码:
SECCON{Welcome to the SECCON 2014 CTF!}
3.re2-cpp-is-awesome alexctf-2017
1 __int64 __fastcall main(int a1, char **a2, char **a3)
2 {
3 char *v3; // rbx
4 __int64 v4; // rax
5 __int64 v5; // rdx
6 __int64 v6; // rax
7 __int64 v7; // rdx
8 __int64 v8; // rdx
9 __int64 char_1; // rdx
10 __int64 s_char; // [rsp+10h] [rbp-60h]
11 char v12; // [rsp+20h] [rbp-50h]
12 char v13; // [rsp+4Fh] [rbp-21h]
13 __int64 v14; // [rsp+50h] [rbp-20h]
14 int k; // [rsp+5Ch] [rbp-14h]
15
16 if ( a1 != 2 )
17 {
18 v3 = *a2;
19 v4 = std::operator<<<std::char_traits<char>>(&std::cout, "Usage: ", a3);
20 v6 = std::operator<<<std::char_traits<char>>(v4, v3, v5);
21 std::operator<<<std::char_traits<char>>(v6, " flag\n", v7);
22 exit(0);
23 }
24 std::allocator<char>::allocator(&v13, a2, a3);
25 std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(&v12, a2[1], &v13);
26 std::allocator<char>::~allocator(&v13);
27 k = 0;
28 for ( s_char = std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::begin(&v12);
29 ;
30 sub_400D7A(&s_char) )
31 {
32 v14 = std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::end(&v12);
33 if ( !cmp_400D3D((__int64)&s_char, (__int64)&v14) )
34 break;
35 char_1 = *(unsigned __int8 *)sub_400D9A((__int64)&s_char);
36 if ( (_BYTE)char_1 != str_6020A0[dword_6020C0[k]] )// 关键比较处
37 error_400B56((__int64)&s_char, (__int64)&v14, char_1);// 输出失败
38 ++k;
39 }
40 success_400B73((__int64)&s_char, (__int64)&v14, v8);// 成功
41 std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::~basic_string(&v12);
42 return 0LL;
43 }
关键处,在一个字符串中取特定顺序的字符进行与输入比较
1 x='L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t'
2 x=list(x)
3 y=[ 36,
4 0,
5 5,
6 54,
7 101,
8 7,
9 39,
10 38,
11 45,
12 1,
13 3,
14 0,
15 13,
16 86,
17 1,
18 3,
19 101,
20 3,
21 45,
22 22,
23 2,
24 21,
25 3,
26 101,
27 0,
28 41,
29 68,
30 68,
31 1,
32 68,
33 43]
34 t=[]
35 for i in range(len(y)):
36 t.append(x[y[i]])
37
38 print(''.join(t))
ALEXCTF{W3_L0v3_C_W1th_CL45535}
4.crackme SHCTF-2017
查壳:

脱壳:
esp脱壳法:
单步执行pushfd后,转到esp

运行,断在一jmp处,单步来到一call,来到oep,在此处脱壳


脱壳成功,可以在ida中直接分析,这里我直接在od中跟一下程序,通过定位提示字符串,发现程序流程很简单,就是一个简单的异或
脚本:
1 x=[18,
2 4,
3 8,
4 20,
5 36,
6 92,
7 74,
8 61,
9 86,
10 10,
11 16,
12 103,
13 0,
14 65,
15 0,
16 1,
17 70,
18 90,
19 68,
20 66,
21 110,
22 12,
23 68,
24 114,
25 12,
26 13,
27 64,
28 62,
29 75,
30 95,
31 2,
32 1,
33 76,
34 94,
35 91,
36 23,
37 110,
38 12,
39 22,
40 104,
41 91,
42 18]
43 s=list('this_is_not_flag')
44 t=[]
45 for i in range(42):
46 t.append(chr(ord(s[i%16])^x[i]))
47 print(''.join(t))
flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}
攻防世界 reverse 进阶 1-4的更多相关文章
- 攻防世界 reverse 进阶 APK-逆向2
APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...
- 攻防世界 reverse 进阶 10 Reverse Box
攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...
- 攻防世界 reverse 进阶 9-re1-100
9.re1-100 1 if ( numRead ) 2 { 3 if ( childCheckDebugResult() ) 4 { 5 responseFalse(); 6 } 7 else if ...
- 攻防世界 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 进阶 notsequence
notsequence RCTF-2015 关键就是两个check函数 1 signed int __cdecl check1_80486CD(int a1[]) 2 { 3 signed int ...
- 攻防世界 reverse 进阶 easyre-153
easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...
- 攻防世界 reverse 进阶 -gametime
19.gametime csaw-ctf-2016-quals 这是一个小游戏,挺有意思的 's'-->' ' 'x'-->'x' 'm'-->'m' 观察流程,发现检验函 ...
- 攻防世界 reverse 进阶 16-zorropub
16.zorropub nullcon-hackim-2016 (linux平台以后整理) https://github.com/ctfs/write-ups-2016/tree/master/nu ...
- 攻防世界 reverse 进阶 15-Reversing-x64Elf-100
15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...
- 攻防世界 reverse 进阶 12 ReverseMe-120
程序流程很清晰 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 unsigned int v3; // ...
随机推荐
- JavaScript 词法 All In One
JavaScript 词法 All In One JavaScript 词法 这部分描述了JavaScript 的词法(lexical grammar). ECMAScript 源码文本会被从左到右扫 ...
- CSS3 弹性盒子(Flex Box)
1 CSS3 弹性盒子(Flex Box) 1 http://caniuse.com/#search=flex%20box https://www.w3.org/TR/css-flexbox-1/ C ...
- Self-XSS All In One
Self-XSS All In One Self-XSS(自跨站脚本)攻击 警告! 使用此控制台可能会给攻击者可乘之机,让其利用 Self-XSS(自跨站脚本)攻击来冒充您并窃取您的信息.请勿输入或粘 ...
- Express All In One
Express All In One express.js, node.js web framework # v4.17.1 Latest, on May 26, 2019 $ yarn add ex ...
- Angular Routing
Angular Routing v9.0.7 https://angular.io/start/start-routing
- API 注解 & Java API annotation
API 注解 & Java API annotation 注解 annotation
- Github上优秀的.NET Core开源项目的集合
内容包括:库.工具.框架.模板引擎.身份认证.数据库.ORM框架.图片处理.文本处理.机器学习.日志.代码分析.教程等. Github地址:https://github.com/jasonhua95/ ...
- Vue和Element基础使用,综合案例学生列表实现
知识点梳理 课堂讲义 1.Vue 快速入门 1.1.Vue的介绍 Vue是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合. 通过尽可能简单的A ...
- Django框架admin后台管理和用户端静态文件
目录 一.admin后台管理 1. 如何使用 2. 路由分发的本质 二.用户上传的静态文件的展示 1. media配置 2. 手动开设media接口 三.图片防盗链 一.admin后台管理 djang ...
- Go的指针
目录 指针 一.指针的声明 二.指针的默认值(Zero Value) 三.指针的解引用 四.向函数传递指针参数 1.非 数组/切片 指针传参 2.数组/切片 指针传参 五.Go不支持指针运算 指针 指 ...