攻防世界WP-reverse-Reversing-x64Elf-100
2020-04-23 12:12
507 查看
无壳,64位elf程序。直接拖入IDA。发现Nice字符串,双击进去。F5查看伪代码。
signed __int64 __fastcall main(__int64 a1, char **a2, char **a3) { signed __int64 result; // rax char s; // [rsp+0h] [rbp-110h] unsigned __int64 v5; // [rsp+108h] [rbp-8h] v5 = __readfsqword(0x28u); printf("Enter the password: ", a2, a3); if ( !fgets(&s, 255, stdin) ) return 0LL; if ( (unsigned int)sub_4006FD((__int64)&s) ) { puts("Incorrect password!"); result = 1LL; } else { puts("Nice!"); result = 0LL; } return result; }
sub_4006FD为判断的关键,接着进去。
signed __int64 __fastcall sub_4006FD(__int64 a1) { signed int i; // [rsp+14h] [rbp-24h] const char *v3; // [rsp+18h] [rbp-20h] const char *v4; // [rsp+20h] [rbp-18h] const char *v5; // [rsp+28h] [rbp-10h] v3 = "Dufhbmf"; v4 = "pG`imos"; v5 = "ewUglpt"; for ( i = 0; i <= 11; ++i ) { if ( (&v3)[i % 3][2 * (i / 3)] - *(char *)(i + a1) != 1 ) return 1LL; } return 0LL; }
代码看起来很简单,但是一开始有个地方把我卡住了,就是
v3v4v5的关系。在
for循环内,没有
v4和
v5,我以为这两个变量没用,但是通过循环体内的
if判断可知,
v3是一个二维数组(但是为什么伪代码会这样?多维数组在伪代码中都是这样表示的吗?)
还有1个地方需要捋一捋,
*(char *)(i + a1),
a1是取输入
flag的地址
(i+a1)表示地址加1,转换成
char类型的指针,然后取首字符。
解密代码如下:
#include <iostream> using namespace std; int fff() { signed int i; // [rsp+14h] [rbp-24h] string str[] = {"Dufhbmf","pG`imos","ewUglpt"}; char a[13]={0};//初始化的时候,多放一个0进去,表示字符串截至,不然输出字符串后会烫烫烫 for ( i = 0; i <= 11; ++i ) { a[i] = (str)[i % 3][2 * (i / 3)]-1; } cout<<a; return 0; } int main() { fff(); system("pause"); return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 攻防世界WP-reverse-school-ctf-winter-2015-simple-check-100
- 攻防世界WP-reverse-re1-100
- 攻防世界WP-reverse-Reversing-XCTF 3rd-GCTF-2017-hackme
- 攻防世界WP-reverse-alexctf-2017-re2-cpp-is-awesome
- 攻防世界WP-reverse-tinyctf-2014-tt3441810
- 攻防世界WP-reverse-BUUCTF-2019-Mysterious
- 攻防世界WP-reverse-suctf-2016-srm-50
- [wp] 攻防世界 ics-04
- 攻防世界 MISC 高手进阶区 就在其中WP 解题思路
- [wp] 攻防世界 upload1
- 攻防世界misc 新手练习区 高手进阶区 wp
- 第32天:攻防世界-Reverse—Newbie_calculations
- [wp] 攻防世界 Web_php_unserialize
- 攻防世界reverse新手之re1
- 第28天:攻防世界-Reverse—reverse-for-the-holy-grail-350
- [wp] 攻防世界 isc-07
- 攻防世界-IgniteMe WP
- [wp] 攻防世界-i-got-id-200
- 攻防世界wp-newscenter
- 3.pwn入门新手做无system泄露libc.so版本攻防世界pwn100 pwn200(dynelf 、libsearcher与got表plt表解)