攻防世界 reverse 进阶 easyre-153
easyre-153
查壳:

upx壳
脱壳:

1 int __cdecl main(int argc, const char **argv, const char **envp)
2 {
3 int pipedes[2]; // [esp+18h] [ebp-38h]
4 __pid_t v5; // [esp+20h] [ebp-30h]
5 int v6; // [esp+24h] [ebp-2Ch]
6 char buf; // [esp+2Eh] [ebp-22h]
7 unsigned int v8; // [esp+4Ch] [ebp-4h]
8
9 v8 = __readgsdword(0x14u);
10 pipe(pipedes); // pipe函数可用于创建一个管道,以实现进程间的通信。
11 // pipe函数的定义如下:
12 // #include<unistd.h>
13 // int pipe(int fd[2]);
14 // pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。
15 // 通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实现双向数据传输,可以使用两个管道。
16 v5 = fork(); // 1)在父进程中,fork返回新创建子进程的进程ID;
17 // 2)在子进程中,fork返回0;
18 // 3)如果出现错误,fork返回一个负值;
19 if ( !v5 ) // 等于0,即在子进程中时
20 {
21 puts("\nOMG!!!! I forgot kid's id");
22 write(pipedes[1], "69800876143568214356928753", 0x1Du);// 写入
23 puts("Ready to exit ");
24 exit(0);
25 }
26 read(pipedes[0], &buf, 0x1Du); // 读取
27 __isoc99_scanf("%d", &v6);
28 if ( v6 == v5 )
29 {
30 if ( (*(_DWORD *)((_BYTE *)lol + 3) & 0xFF) == 204 )
31 {
32 puts(":D");
33 exit(1);
34 }
35 printf("\nYou got the key\n ");
36 lol(&buf); // 生成flag
37 }
38 wait(0);
39 return 0;
40 }
查看lol(&buf)
1 int __cdecl lol(_BYTE *a1)
2 {
3 char v2; // [esp+15h] [ebp-13h]
4 char v3; // [esp+16h] [ebp-12h]
5 char v4; // [esp+17h] [ebp-11h]
6 char v5; // [esp+18h] [ebp-10h]
7 char v6; // [esp+19h] [ebp-Fh]
8 char v7; // [esp+1Ah] [ebp-Eh]
9 char v8; // [esp+1Bh] [ebp-Dh]
10
11 v2 = 2 * a1[1];
12 v3 = a1[4] + a1[5];
13 v4 = a1[8] + a1[9];
14 v5 = 2 * a1[12];
15 v6 = a1[18] + a1[17];
16 v7 = a1[10] + a1[21];
17 v8 = a1[9] + a1[25];
18 return printf("flag_is_not_here");
19 }
wp:
1 a1='69800876143568214356928753'
2 a1=list(map(ord,a1))
3 v2 = 2 * a1[1];
4 v3 = a1[4] + a1[5];
5 v4 = a1[8] + a1[9];
6 v5 = 2 * a1[12];
7 v6 = a1[18] + a1[17];
8 v7 = a1[10] + a1[21];
9 v8 = a1[9] + a1[25];
10
11 # x=locals().items()
12 # print(x)
13 flag=''
14 for i in range(2,9):
15 flag+=chr(locals()['v'+str(i)])
16 print(flag)
rhelheg
特娘的,提交需要加上RCTF{}
RCTF{rhelheg}
攻防世界 reverse 进阶 easyre-153的更多相关文章
- 攻防世界 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 进阶 -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; // ...
随机推荐
- DOM型XSS
打开漏洞页面,随便输入点东西,发现没有啥东西. 但是我们发现我们输入的11,在面的herf 中 看到这儿就很简单了,我们只需要闭合一下,就可以构造出我们的payload了. '><img ...
- windows脚本bat编程:WIN10脚本自动启动虚拟环境中的jupyter
python编程对各种扩展包的版本依赖较严格,为了解决版本差异,通用情况下会使用virtualenv创建的虚拟环境来独立应用.那么每次使用的时候就需要启动虚拟环境,如果每次都是手工启动,每次输入几条命 ...
- 最新 Markdown for GitHub教程
Markdown 教程 Markdown 是什么? Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档. 它 ...
- jest & code testing
jest jest & code testing https://jestjs.io/zh-Hans/ 24.9 https://jestjs.io/docs/zh-Hans/getting- ...
- 如何重置电信悦 me 智能网关
如何重置电信悦 me 智能网关 重置电信网关密码 电信悦 me 智能网关密码忘记了怎么办? 首先,得要知道默认终端配置地址和默认终端配置密码. 可以从无线路由器背面标签得知. 如果不知道密码了,可以通 ...
- Flutter in DartPad
Flutter in DartPad Gist Sharing https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide https://gis ...
- HTMLMediaElement.srcObject & URL.createObjectURL & HTMLMediaElement.src
HTMLMediaElement.srcObject & URL.createObjectURL & HTMLMediaElement.src Uncaught TypeError: ...
- Redis 对过期数据的处理
Redis 对过期数据的处理 在 redis 中,对于已经过期的数据,Redis 采用两种策略来处理这些数据,分别是惰性删除和定期删除 惰性删除 惰性删除不会去主动删除数据,而是在访问数据的时候,再检 ...
- 哪些原因会导致JAVA进程退出?
本文转载自哪些原因会导致JAVA进程退出? 导语 JAVA进程消失可能有哪些原因? 那我们就开一篇文章说一下这个问题,其实很easy的,无外乎三种情况. linux的OOM killer杀死 JVM自 ...
- 手把手教你Centos7 部署 gitlab社区版
一.前置说明: 操作系统:Centos 7 物理内存:>=2G 本人亲测,如果安装低版本的gitlab,比如我这里所使用的v8.17.0,物理内存1G,swap 2G虚拟内存即可部署.高版本的所 ...