AliCTF2014题目解析之<reverse-200>

reverse-200


工具:procmon、immunity dbg、idapro



首先通过procmon观察ch2.exe

发现ch2.exe需要读取flag.txt,可以分析出ch2.exe是要读取flag.txt内容,加密后写到flag.crpyt
目录下创建一个flag.txt,写入aaaaaaaaaaaa,再次使用procmon观察

根据ch2.exe的api调用过程,开始动态调试
首先
bp ReadFile
直接断在读取flag.txt的过程,继续执行到用户代码

用IDA pro打开ch2.exe,到地址0x4022B8

IDA自动识别出了所处的函数_read

显然只是个读文件内容的函数,有可能是C语言的标准库。结合动态调试往外退,依次是如下函数
_filbuf
fread
最后跟踪到0x40121E,这里IDA pro没能识别出指令,还有很多标红的地方,根据一些书中所说,应该是使用了反汇编机制了

按《恶意代码分析实战》一书中所说的,写一段IDA python脚本,从0x401000开始将干扰码都改为NOP指令,改完后发现0x40121E下面指令序列变为

随后调用了函数 sub_401000,查看函数sub_401000

这里简单分析一下,改一下变量名,可以看出就是加密函数了,逻辑很简单,限于篇幅,就不继续分析了。
另:看了wuyun上一篇帖子的解法是不通过逆向分析,直接构造可见字符集交给程序加密,得到映射表,阿里大牛原意可能是让同学们用这种方法,不过使用逆向方法也不失为一次很好的锻炼机会。

来自为知笔记(Wiz)

时间: 2024-10-13 13:14:33

AliCTF2014题目解析之<reverse-200>的相关文章

AliCTF2014题目解析之&lt;reverse-300&gt;

reverse-300 工具:IDA pro.WinDbg.UPX.Resource Hacker 先运行程序看效果点击按钮直接崩溃,同时由于程序放到32位的xp虚拟机中不能运行,应该是64位程序.根据提示程序本身就是有问题的,所以直接上IDA pro,发现貌似是用UPX加了壳的: 使用UPX脱壳看看成功!运行Ch3_d.exe看看效果这效果...直接不能运行了,脱壳之前还可以弹出窗口来着!再从新脱一次壳,还这样,好吧,it's a trap! 用windbg分析一下崩溃的原因:把windbg注

There&#39;s Treasure Everywhere! poj1473题目解析

题目: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 总时间限制:  1000ms 内存限制:  65536kB 描述 Finding buried treasures is simple: all you need is a map! The pirates in the Caribbean were famous for their enormous buried treasures and their elaborate maps

增量备份,11g052题目解析

增量备份分为差异备份(differential incremental backup)和累积备份(cumulative incremental backup),这是两种执行增量备份操作的不同方法. 80. You perform differential incremental level 1 backups of your database on each working day and level 0 backup on Sundays, to tape. Which two stateme

部分单调队列优化 DP 题目解析

这里专门放一些单调队列优化 DP 的题目,并加上简要解析. Luogu P1725 琪露诺 易得转移方程为 $$f_i=\max_{j\,=\,\max(i-R,\;0)}^{i-L}f{_ j}+a_i\;(L \le i \le n)$$ 那么,其中 $\max$ 部分可以看成一段区间的最大值,用单调队列维护. 然后答案是 $$\max_{i\,=\,n-r+1}^{n} f_i$$ 时间复杂度 $O(n)$. 部分单调队列优化 DP 题目解析 原文地址:https://www.cnblog

第七届蓝桥杯C/C++B组省赛题目解析

题目1:煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 解析: 第一层:1个. 第二层:2*3-3=3个. 第三层:3*3-3=6个. 第四层:4*3-3=10个. 代码如下: int s=0,a=0; for(int i=1;i<=100;i++){ a=a+i;

英雄会题目解析- 第五届在线编程大赛月赛第三题:石子游戏

题目: 甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定.两人轮流按下列规则取走一些石子,游戏的规则如下:1.每一步应取走至少一枚石子:2.每一步只能从某一堆中取走部分或全部石子:3.如果谁无法按规则取子,谁就是输家.如果甲乙两人都采取最优的策略,甲先拿,请问,是甲必胜还是乙必胜.输入格式:多组数据,每组数据两行,第一行是一个整数N, 2<=N<=10000下一行是N个正整数,代表每堆的石子数,石子数在32位整数内.输出格式:每组测试数据输出一行,如果甲存在必胜策略,输出"W

Sun考试认证题目解析(强力推荐,巩固基础)

转载请注明出处:http://www.ming-yue.cn/java-basic/. 1,给定以下代码,求j的值. public class Test { public static void main(String[] args) throws Exception { int i = 0xFFFFFFF1; int j = ~i; } } A. 0 B. 1 C. 14 D. –15 E. An error at line 3 causes compilation to fail. F. A

JS经典题目解析

此次列举出一些觉得有意思的JS题目(来源于出了名的44题),相信有非常多关于这些题目的博客,写这篇博客的目的在于巩固一些知识点,希望能和读者共同进步. 1. map函数执行过程 ["1", "2", "3"].map(parseInt) 答案: [1, NaN, NaN] 解析: map(function callback(current, index, array)), map 回掉提供三个参数,current value, index of

re 模块, 正则表达式 \w+\d+ 的重复问题引发的题目解析

题目 计算以下代码的结果 s = "?!.18)dajslj$12.15613sdadw.123sdasda35615.168sndsda$15.6sdasd.sdfsdgw123.156s" p1 = re.compile("\w+\.\w+\d+\.+\d+") print(p1.findall(s)) p1 = re.compile("(\w+)\.(\w+)((\d+)\.+\d+)") print(p1.findall(s)) 答案 #