ISCC2014-reverse

这是我做reverse的题解。在咱逆向之路上的mark一下,,水平有限,大牛见笑。

 

题目及题解链接:http://pan.baidu.com/s/1gd3k2RL

宗女齐姜

果然是仅仅有50分的难度,OD直接找到了flag.

 

找到杀手

这题用OD做非常麻烦。我改用IDA了。又是秒破

将图中字符串输入,程序生成了四张扑克牌图片。题目让依据密文判断。就4个字符串,一个一个试最多4次就出来了,哈哈

 

 

避难母国

这题挺有意思的,总共要经过13次听取建议,太麻烦,在第一次是Andy后,以后都用改变寄存器状态的方式跳过剩下的环节。最后程序打印出flag。

 

流亡齐国

用不成OD了,用Reflector得到关键函数的源代码

但是我不会C#啊,找到精通C#的同学得到解密函数,并取得了flag.

 

 

 

 

何去何从

这题貌似简单。事实上就是简单,当然做出来了就感觉简单,事实上有一个陷阱,仅仅要发现了就OK了。

这道题非常有诱惑性,按正常的思路非常快就得到了一个flag-like的家伙。

是vc 6.0的程序,非常easy就找到了main函数

进入后

当中的凝视是所有做完后的凝视。第一遍时非常正常的跳过了当中凝视为“不能调”、“这才是关键”的那部分代码,进入了凝视为“关键进入”的函数,

 

 

这个函数首先经过0x13次的循环生成“(3q^;^3lfjq&D7V4Hhd”,然后与输入的字符串比較。相等则显示“是这个么”,不等则显示“错了”。似乎flag已经找到了,真对不起200分的价值是不是?,但是提交时却发现不对,难道要对这个字符串做什么变换么?仅仅能回去再细致看看程序了。

又到了这一步,按程序的意思是。jnz是一定会跳的,可是里边的两个函数有什么用呢,于是决定进去看看,强制改了跳转。F8跳过第二个函数后,程序打印出

,于是进去看看。

到了这一步,

再跟进去瞧瞧,

这和之前生成的那个0x13长的伪flag的生成算法是一样的。执行完后在内存中找到这个字符串“(3q&vf2vw%f7Vj9Ookj”,这个就是FLAG了!


逃离临淄

 

执行程序如图

在程序函数中找到了GetWindowTextA函数,下断点,

在编辑框中随便输入点东西后点“注冊”。到断点

调用两次这个函数。得到注冊名和注冊码。存在0x18CD98和0x18CDB8处

在下图这个函数中会对注冊码进行变形

进入后

004016C0  /$ 8B5424 04     mov edx,dword ptrss:[esp+0x4]

004016C4  |. 57            push edi

004016C5  |. 8BFA          mov edi,edx

004016C7  |. 83C9 FF       or ecx,0xFFFFFFFF

004016CA  |. 33C0          xor eax,eax

004016CC  |. F2:AE         repne scas byte ptres:[edi]

004016CE  |. F7D1          not ecx

004016D0  |. 49            dec ecx

004016D1  |. 83F9 1F       cmp ecx,0x1F                 推断长度是否为0x1f

004016D4  |.  7406         je XCrackMe?004016DC

004016D6  |. 32C0          xor al,al

004016D8  |. 5F            pop edi

004016D9  |.  C20800       retn 0x8

004016DC  |> 8B4424 0C     mov eax,dword ptrss:[esp+0xC]

004016E0  |. 53            push ebx

004016E1  |. 56            push esi

004016E2  |. 8BF2          mov esi,edx

004016E4  |. 8BC8          mov ecx,eax

004016E6  |. 2BF0          sub esi,eax

004016E8  |.  BF1F000000   mov edi,0x1F

004016ED  |> 8A040E        /mov al,byte ptrds:[esi+ecx]

004016F0  |.  3C30         |cmp al,0x30

004016F2  |.  7C17         |jl XCrackMe?

0040170B

004016F4  |.  3C39         |cmp al,0x39

004016F6  |.  7F13         |jg XCrackMe?

0040170B

004016F8  |. 0FBEC0        |movsx eax,al

004016FB  |. 83E8 2B       |sub eax,0x2B

004016FE  |.  BB0A000000   |mov ebx,0xA

00401703  |.  99            |cdq

00401704  |. F7FB          |idiv ebx

00401706  |. 80C2 30       |add dl,0x30

00401709  |.  EB34         |jmp XCrackMe?0040173F         (数字-2B)/ A 取余

0040170B  |> 3C 41         |cmp al,0x41

0040170D  |.  7C17         |jl XCrackMe?00401726

0040170F  |.  3C5A         |cmp al,0x5A

00401711  |.  7F13         |jg XCrackMe?00401726

00401713  |. 0FBEC0        |movsx eax,al

00401716  |. 83E8 34       |sub eax,0x34

00401719  |.  BB1A000000   |mov ebx,0x1A

0040171E  |. 99            |cdq

0040171F  |. F7FB          |idiv ebx

00401721  |. 80C2 41       |add dl,0x41

00401724  |.  EB19         |jmp XCrackMe?

0040173F         (大写-0x34) / 1A 取余

00401726  |> 3C 61         |cmp al,0x61

00401728  |.  7C17         |jl XCrackMe?

00401741

0040172A  |.  3C7A         |cmp al,0x7A

0040172C  |.  7F13         |jg XCrackMe?00401741

0040172E  |. 0FBEC0        |movsx eax,al

00401731  |. 83E8 54       |sub eax,0x54

00401734  |.  BB1A000000   |mov ebx,0x1A

00401739  |. 99            |cdq

0040173A  |.  F7FB          |idiv ebx

0040173C  |. 80C2 61       |add dl,0x61                 (小写-0x54) / 1A 取余

0040173F  |> 8AC2          |mov al,dl

00401741  |> 8801          |mov byte ptrds:[ecx],al

00401743  |. 41            |inc ecx

00401744  |. 4F            |dec edi

00401745  |.^ 75 A6         \jnz XCrackMe?004016ED

00401747  |. 5E            pop esi

00401748  |. 5B            pop ebx

00401749  |.  B001         mov al,0x1

0040174B  |. 5F            pop edi

0040174C  \.  C20800       retn 0x8

跳出这个函数后

下面都是对变形后的字符串进行的推断。

推断了三位。

再然后

是对后十位的比較,将后十位变成整形后与EDI比較。edi由下图函数得到

 

 

 

还好这个结果与后十位的内容无关。

 

当一切判定条件都通过后,就来到最后弹出对话框的地方。

 

 

这个注冊码vscc11-695356-695356-6494939865是2014年8月1日过期

这个注冊码是2015年八月1日到期  vscc11-695356-605356-6456326018

 

 咱如今的逆向水平也就仅仅能做到这了,剩下的题希望能从大牛那里得到经验。也算从这次比赛得到的最大收获了。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 获取当前时间再往前几个月_Python 中的时间和日期操作

Python中,对日期和时间的操作,主要使用这3个内置模块: datetime 、 time 和 calendar 获取当前时间对应的数字 开发程序时,经常需要获取两个代码位置在执行时的时间差,比如,我们想知道某个函数执行大概耗费了多少时间,就可以使用time.time()来做。 import time before =…

Java BigDecimal restder()方法与示例

BigDecimal类的restder()方法 (BigDecimal Class remainder() method) Syntax: 句法: public BigDecimal remainder(BigDecimal divsr);public BigDecimal remainder(BigDecimal divsr, MathContext ma_co);remainder() method is available in java.math package.…

python程序需要编译么_python需要编译么

一个经常听见的问题,那就是:Python是解释型的语言吗?它会被编译吗?这个问题没有想象中那么好回答。和很多人认识世界一样,习惯以一个简单的模型去评判一些事物。而事实上,里面包含了很多很多的细节。通常的…

DevOps平台中的自动化部署框架设计

本文目录: 一、背景 二、我们的需求是什么? 三、概念澄清 四、概念模型 五、总体设计 六、关键点设计 七、总结 一、背景 说到自动化部署,大家肯定都会想到一些配置管理工具,像ansible,chef,puppet, saltstack等等。虽然这些工具给…

插入排序算法 ,递归实现_C程序实现递归插入排序

插入排序算法 ,递归实现The only difference between Insertion sort and Recursive Insertion Sort is that in the Recursive method, we start from placing the last element in its correct position in the sorted array instead of starting from the first. 插入排序和…

python虚拟机直接加载字节码运行程序_第二章 python如何运行程序

一.python解释器介绍Python解释器是一种让程序运行起来的程序。实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层。当Python包安装在机器上后,它包含了一些最小化的组件:一个解释器和支持的库。二.python的视角当Python运行脚本时&…

Java LocalDate类| 带示例的format()方法

LocalDate类format()方法 (LocalDate Class format() method) format() method is available in java.time package. format()方法在java.time包中可用。 format() method is used to format this LocalDate object by using the given DateTimeFormatter object. format()方法…

胃癌2019csco指南_2019 CSCO胃癌诊疗指南精华来了!

一文轻松get 2019 CSCO胃癌诊疗指南更新要点!文丨青青子衿 中山大学肿瘤防治中心来源丨医学界肿瘤频道近日,2019年CSCO指南发布会于南京召开。今天为大家推送的是2019 CSCO胃癌诊疗指南的最新更新,在发布专场中,来自华中科技大学同…

001_docker-compose构建elk环境

由于打算给同事分享elk相关的东西,搭建配置elk环境太麻烦了,于是想到了docker。docker官方提供了docker-compose编排工具,elk集群一键就可以搞定,真是兴奋。好了下面咱们开始吧。 一、 https://github.com/deviantony/docker-elk $ cd /006_xxxallproject/005_docker/001_e…

Java即时类| toString()方法与示例

即时类toString()方法 (Instant Class toString() method) toString() method is available in java.time package. toString()方法在java.time包中可用。 toString() method is used to represent this Instant as a String by using the standards ISO-8601 format. toString…

learn opengl 中文_LearnOpenGL CN

欢迎来到OpenGL的世界欢迎来到OpenGL的世界。这个工程只是我(Joey de Vries)的一次小小的尝试,希望能够建立起一个完善的OpenGL教学平台。无论你学习OpenGL是为了学业,找工作,或仅仅是因为兴趣,这个网站都将能够教会你现代(Core-p…

MYSQL5.7 日志管理

2019独角兽企业重金招聘Python工程师标准>>> 慢查询日志slow-query-log1 slow-query-log-filefile_name long_query_time1 #SQL执行多长时间以上会记录到慢查询日志,0~10s log_slow_admin_statementsOFF #在写入慢查询日志的语句中包含缓慢的管理语句。 …

duration java_Java Duration类| ofHours()方法与示例

duration javaDuration Class of Hours()方法 (Duration Class ofHours() method) ofHours() method is available in java.time package. ofHours()方法在java.time包中可用。 ofHours() method is used to represent the given hours in this Duration. ofHours()方法用于表示…

sumo的简单应用_sumo快速运行简单仿真实例详细教程

本文旨在让大家快速的了解sumo,并给出运行一个简单的sumo的例子的教程,进而了解基本sumo工程的架构,使大家对该软件产生兴趣并持续学习下去,刚开始学习仿真的确枯燥,项目“跑起来”才是大家学习下去的动力,…

stl vector 函数_vector :: crbegin()函数,以及C ++ STL中的示例

stl vector 函数C vector :: crbegin()函数 (C vector::crbegin() function) vector::crbegin() is a library function of "vector" header, it is used to get the last element of a vector using const_reverse_iterator, it returns a const reverse iterator …

ReactNative学习笔记(二)Flex布局

flexDirection 决定主轴方向 column:垂直方向为主轴row:水平方向为主轴justifyContent 决定主轴元素排列方式 flex-startflex-endcenterspace-betweenspace-aroundalignItems 决定侧轴元素排列方向 flex-startflex-endcenterbaselinestretch

cad导出 dxf后中文不显示_CAD快速看图 for Mac

CAD快速看图 for Mac是一款非常小巧、快速、方便的DWG看图工具,CAD快速看图 Mac版可脱离AutoCAD最快速、最方便浏览DWG和DXF图纸,支持二维或三维图纸,支持高清、多文件和云字体,非常实用的一款CAD看图软件,CAD快速看图…

scala运算符_Scala的所有符号运算符是什么意思?

scala运算符Scala的符号运算符 (Scalas symbolic operators) The symbolic operators in Scala are symbols that have a specific task that they perform when called in a Scala program. Scala library defines a lot of symbols that can be used while programming in Sc…

关于java.util.ConcurrentModificationException和remove倒数第二个元素

2019独角兽企业重金招聘Python工程师标准>>> 首先是两段代码的执行结果&#xff1a; 代码一&#xff1a; public class TestListRemove {public static void main(String[] args) {List<Integer> list new ArrayList<Integer>();list.add(1);list.add(…

linux 操作mysql 数据库命令_Linux 操作数据库命令

一、连接数据库格式&#xff1a; mysql -h主机地址 -u用户名 &#xff0d;p用户密码mysql -hlocalhost -uroot -p123注&#xff1a;-h,-u,-p 后面不加空格&#xff0c;进入数据库操作后每个命令结尾都需加“&#xff1b;(分号)”二、退出MYSQL命令exit (回车)三、显示所有数据库…