这是我做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的更多相关文章

  1. LeetCode 7. Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...

  2. js sort() reverse()

    数组中存在的两个方法:sort()和reverse() 直接用sort(),如下: ,,,,,,,,,,,]; console.log(array.sort());ps:[0, 1, 2, 2, 29 ...

  3. [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 ...

  4. [LeetCode] Reverse String 翻转字符串

    Write a function that takes a string as input and returns the string reversed. Example: Given s = &q ...

  5. [LeetCode] Reverse Linked List 倒置链表

    Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...

  6. [LeetCode] Reverse Bits 翻转位

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  7. [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 ...

  8. [LeetCode] Reverse Words in a String 翻转字符串中的单词

    Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...

  9. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  10. [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-> ...

随机推荐

  1. activity 保存数据

    activity 保存数据对android的商业项目十分的重要,譬如你在发微博的时候,突然来了一个电话,你洋洋洒洒写了100个字,你不能保存的话,你岂不要卖要骂娘. 那activity究竟是保存数据的 ...

  2. 【翻译自mos文章】CRS显示 正在执行的db instance 是offline状态

    CRS显示 正在执行的db instance 是offline状态 转自: CRS shows Running Instance Status as OFFLINE (Doc ID 1673397.1 ...

  3. Redis自学笔记 --Hash、List、Set类型简述

    Hash类型                                                                                    hset key f ...

  4. DataTrigger

    <ListView Name="lvStatus" MinHeight="120" Grid.Row="2"> <List ...

  5. [Backbone]7. Collection Views, Custom Events

    It's finally time to start building out our Appointment app. We're going to be using a collection an ...

  6. [Javascript] Funciton Expression

    //This will load the code into the memory no matter //you call it or not function diffOfSquares(a,b) ...

  7. Java开发中所遇问题积累

    1.判断两个字符串是否相等时,如下,使用" == "无效: String name = "Jack"; if(name.equals("Jack&qu ...

  8. Android 之布局(一)

    Android的布局类型: 主要有:LinearLayout(线性布局).RelativeLayout(相对布局).TableLayout(表格布局).AbsoluteLayout(绝对布局).Fra ...

  9. 【.NET中AOP的实现方案】静态代理

    Spring AOP 应该是比较出名的了,今天说的是C#里的AOP,C#的AOP实现的方式有很多种,现在就先介绍静态代理的实现方案: 模拟场景:我们在删除用户,或者更新用户的时候进行数据原始备份,这样 ...

  10. 很不错标签云js插件

    在蓝色看到有需要标签云的球形效果,我记得之前在网上见到过,印象比较深刻,就找出地址发给他了,接下来却还有人需要这个效果的JQuery插件,网上好像也有,但是我看现在这个就不错,就想想自己改成jquer ...