IDF实验室:倒行逆施
简单的PE文件逆向(.exe-IDA)
下载下来文件之后发现是一个exe文件,运行以后发现。
然后利用IDA对它进行操作。然后
选择strings
再按ctrl+F,在下方框框中输入plz enter the flag:
双击进入以后找到format那块,就是主函数再使用F5可以使函数变成c代码。
int sub_4113A0() { int v1; // [sp+Ch] [bp-194h]@1 int i; // [sp+D4h] [bp-CCh]@8 int v3; // [sp+E0h] [bp-C0h]@8 int v4; // [sp+ECh] [bp-B4h]@1 int v5; // [sp+F0h] [bp-B0h]@1 int v6; // [sp+F4h] [bp-ACh]@1 int v7; // [sp+F8h] [bp-A8h]@1 int v8; // [sp+FCh] [bp-A4h]@1 int v9; // [sp+100h] [bp-A0h]@1 int v10; // [sp+104h] [bp-9Ch]@1 int v11; // [sp+108h] [bp-98h]@1 int v12; // [sp+10Ch] [bp-94h]@1 int v13; // [sp+110h] [bp-90h]@1 int v14; // [sp+114h] [bp-8Ch]@1 int v15; // [sp+118h] [bp-88h]@1 int v16; // [sp+11Ch] [bp-84h]@1 int v17; // [sp+120h] [bp-80h]@1 int v18; // [sp+124h] [bp-7Ch]@1 int v19; // [sp+128h] [bp-78h]@1 int v20; // [sp+12Ch] [bp-74h]@1 int v21; // [sp+130h] [bp-70h]@1 int v22; // [sp+134h] [bp-6Ch]@1 int v23; // [sp+138h] [bp-68h]@1 int v24; // [sp+13Ch] [bp-64h]@1 int v25; // [sp+140h] [bp-60h]@1 char v26; // [sp+14Fh] [bp-51h]@1 ]; // [sp+178h] [bp-28h]@2 char v28; // [sp+189h] [bp-17h]@13 char v29; // [sp+18Ah] [bp-16h]@14 char v30; // [sp+18Bh] [bp-15h]@15 char v31; // [sp+18Ch] [bp-14h]@16 char v32; // [sp+18Dh] [bp-13h]@17 unsigned int v33; // [sp+19Ch] [bp-4h]@1 int savedregs; // [sp+1A0h] [bp+0h]@1 memset(&v1, 0xCCu, 0x194u); v33 = (unsigned int)&savedregs ^ dword_417000; v26 = ; v4 = ; v5 = ; v6 = ; v7 = ; v8 = ; v9 = ; v10 = ; v11 = ; v12 = ; v13 = ; v14 = ; v15 = ; v16 = ; v17 = ; v18 = ; v19 = ; v20 = ; v21 = ; v22 = ; v23 = ; v24 = ; v25 = ; printf("plz enter the flag:"); sub_411136(); ) { getch(); v1 = sub_411136(); v27[v26] = v1; ) break; ) { printf("\b\b"); sub_411136(); --v26; } else { printf("%c", v27[v26]); sub_411136(); ++v26; } } v3 = ; ; i < ; ++i ) { if ( v27[i] != byte_415768[*(&v4 + i)] ) v3 = ; } || v29 != || v30 != || v31 != || v32 != ) v3 = ; v27[v26] = ; printf("\r\n"); sub_411136(); if ( v3 ) { printf("u r wrong\r\n\r\n"); sub_411136(); sub_41113B(); } else { printf("u r right!\r\n"); sub_411136(); } system("pause"); sub_411136(); sub_411082(); sub_411014(); return sub_411136(); }
我们发现如果要得到正确的flag,那么v3 = 0。
在这段函数中
; i < ; ++i ) { if ( v27[i] != byte_415768[*(&v4 + i)] ) v3 = ; }
光标移动到byte_415768上,IDA会提示你这是一个char[]的数组,双击它
就可以发现这个数组的内容是wfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138。
然后*(&v4 + i)。这句话的意思大概就是取v4的地址,然后++,从v4取到v20吧。写个小程序跑一下就能发现得到wctf{Pe_cRackme1_。
然后
|| v29 != || v30 != || v31 != || v32 != ) v3 = ;
选择转化成char型。得到v28 = ‘1‘, v29 = '0' .......
后半段flag便是1024}
综上得到答案。
IDF实验室:倒行逆施的更多相关文章
- IDF 实验室部分题目WriteUp
前天花了一个下午的时间刷了几道IDF实验室的题目, 这个网站实在是有点冷清, 题目也比较少, 所以就被我和师兄们刷榜了2333... 因为我最先开始做, 所以就干脆刷到第一去了. 题目很水, 切莫见怪 ...
- IDF实验室-CTF训练营-牛刀小试CTF
自从开始玩CTF后,发现这个游戏还是比较有意思,发现了一个练习场地IDF实验室:http://ctf.idf.cn/ 刷刷里面的题目,今天完成了其中的牛刀小试,分享一下解题思路: 1. 被改错的密码 ...
- IDF实验室:牛刀小试
被改错的密码[从格式和长度来推测出是MD5] 迷醉..人生第一道ctf题?据说是因为看起来像是MD5加密的格式,但是数了一下发现有33个字符,就推测???熊孩子多敲了一位进去.从32个变33个了,然后 ...
- IDF实验室WORD隐写术
上帝也哭泣http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=48 下载下来,发现是一个word文档,看来信息应该就 ...
- IDF实验室-简单编程-特殊的日子 writeup
题目:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=50 题目提示要爆破,代表加密应该是不可逆的. 密文:4D ...
- IDF实验室-简单的ELF逆向 writeup
题目:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=39 下载得到ElfCrackMe1文件,直接用IDA打开 ...
- IDF实验室-python ByteCode writeup
题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=45 下载来发现是crackme.pyc 可以用unc ...
- IDF实验室-简单编程-字符统计 writeup
题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=37 网站:http://ctf.idf.cn/gam ...
- IDF实验室解题学习笔记1
1.图片里的英文 图片可以有很多种打开方式,破解该题,需将图片下载下来. 对于图片,我们可以使用图片编辑软件,进行各种调明暗,变色调等操作. 我们还可以使用2进制或者16进制的文件打开方式打开.该图使 ...
随机推荐
- UOJ#67. 新年的毒瘤
传送门 练习一下Tarjan的模板. 求一下割点,然后加个约束条件判一下特殊点,剩下的就是所求点. //UOJ 67 //by Cydiater //2016.10.27 #include <i ...
- <<< jquery简介、开头语法、在线开发手册
简介 jQuery是一个兼容多浏览器的javascript框架,核心理念是write less,do more(写得更少,做得更多).jQuery在2006年1月由美国人John Resig在纽约的b ...
- Hibernate的session缓存和对象的四种状态
一.session缓存 说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了 而hibernate获取一个对象后,会将对象存入s ...
- MySQL5.0数据库的安装
======================= 未完待续,持续更新中... -------------------------------------------------
- 《大型网站系统与Java中间件实践》读书笔记——CAP理论
分布式事务希望在多机环境下可以像单机系统那样做到强一致,这需要付出比较大的代价.而在有些场景下,接收状态并不用时刻保持一致,只要最终一致就行. CAP理论是Eric Brewer在2000年7月份的P ...
- JSP脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化.也就是说它们已经是对象,可以直接使用. 我们随意打开一个由JSP页面生成的Ser ...
- 【Python网络爬虫一】爬虫原理和URL基本构成
1.爬虫定义 网络爬虫,即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的.从网站某一个页面(通常 ...
- C段渗透攻击必看的技术知识
假设想攻击的主机IP是:61.139.1.79 同一子网下我们已有权限的主机IP是:61.139.1.88并可以3389登陆 第一步: tracert 61.139.1.1 C:\WIN200 ...
- 学习JVM GarbageCollection
前言 Java和C++之间显著的一个区别就是对内存的管理.Java和C++把内存管理的权利赋予给开发人员的方式不同,Java拥有一套自动的内存回收系统(Garbage Collection,GC)简称 ...
- percona-toolkit 之 【pt-online-schema-change】说明
背景: MySQL 大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响.在5.1之后随着Plugin Innodb的出现在线加索引的提 ...