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
咱如今的逆向水平也就仅仅能做到这了,剩下的题希望能从大牛那里得到经验。也算从这次比赛得到的最大收获了。
ISCC2014-reverse的更多相关文章
- LeetCode 7. Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...
- js sort() reverse()
数组中存在的两个方法:sort()和reverse() 直接用sort(),如下: ,,,,,,,,,,,]; console.log(array.sort());ps:[0, 1, 2, 2, 29 ...
- [LeetCode] Reverse Vowels of a String 翻转字符串中的元音字母
Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...
- [LeetCode] Reverse String 翻转字符串
Write a function that takes a string as input and returns the string reversed. Example: Given s = &q ...
- [LeetCode] Reverse Linked List 倒置链表
Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...
- [LeetCode] Reverse Bits 翻转位
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- [LeetCode] Reverse Words in a String II 翻转字符串中的单词之二
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...
- [LeetCode] Reverse Words in a String 翻转字符串中的单词
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...
- [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- [LeetCode] Reverse Linked List II 倒置链表之二
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
随机推荐
- JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法
$(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; ; i & ...
- Callable、Future&阻塞队列&阻塞栈
Callable.Future 简单应用 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务( ...
- .NET/Mysql-petatoco连接mysql数据库
安装mysql数据库 用nugget添加.net连接mysql数据库的组件
- 如何做windows server 2008 R2 的磁盘清理
参考如下的链接: https://technet.microsoft.com/en-us/library/ff630161(v=ws.10).aspx 运行后可能没有啥反应,磁盘空间也没增大.那是因为 ...
- QR分解与最小二乘
主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现 一.QR分解 R分解法是三种将矩阵分解的方式之一.这种方式,把矩阵分解成一个正交矩阵与一个上三角矩阵的 ...
- Effective C++ 38-42
38.绝不要又一次定义继承而来的缺省參数值. 又一次定义函数缺省參数值意味着又一次定义函数.而非虚函数不能又一次定义,所以将就考虑不能又一次定义虚函数的缺省參数值的原因:虚函数是动态绑定的而缺省參数值 ...
- Eclipse Console 加大显示的行数和禁止错误弹出
在 Preferences-〉Run/Debug-〉Console里边,去掉对Limit console output的选择,或者选择,设置一下buffer size的设定值 禁止弹出: Prefer ...
- vmwear虚拟机Ubuntu设置桥接(Bridged)
近期遇上大数据的实验课,须要搭建hadoop的实验环境,所以和舍友组队搭环境,因为感觉双系统没有虚拟机方便,所以我安装的Ubuntu的虚拟机,舍友安装的双系统.可是在将我的Ubuntu虚拟机连接到与舍 ...
- Oracle内存管理(之二)
[深入解析--eygle] 学习笔记 1.2.2 UGA和CGA UGA(用户全局区)由用户会话数据.游标状态和索引区组成.在共享server模式下,一个共享服务进程被多个用户进程共享,此时UGA是S ...
- map()3
# -*- coding: utf-8 -*- #python 27 #xiaodeng #map()3 ''' map(...) map(function, sequence[, sequence, ...