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的程序,很容易就找到了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

时间: 2024-10-16 03:44:54

ISCC2014-reverse的相关文章

Django url 标签和reverse()函数的使用(转)

原文:http://www.yihaomen.com/article/python/355.htm 使用url标签和reverse()函数,可以避免在模板和view中对url进行硬编码,这样即使url改变了,对模板和view也没有影响 起初用django 开发应用的时候,完全是在urls.py 中硬编码配置地址,在views.py中HttpResponseRedirect()也是硬编码转向地址,当然在template 中也是一样了,这样带来一个问题,如果在urls.py 中修改了某个页面的地址,

186. Reverse Words in a String II

https://leetcode.com/problems/reverse-words-in-a-string-ii/#/description Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters. The input string does not contain leading or trailing spaces and

codeforces 414C C. Mashmokh and Reverse Operation(归并排序求逆序对)

题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university

Forward Proxy & Reverse Proxy | 正向代理 和 反向代理

对请求和响应内容不做修改的转发的服务器,被称为代理服务器.代理服务器分为两种类型:正向代理 和 反向代理. 正向代理:面向互联网,从更广范围获取信息的代理. 反向代理:面向内部,一般用于某企业的网站的前端的代理.反向代理能承担负载均衡,身份认证,内容缓存的任务.这些功能在反向代理上面实现会显得很自然. 正向代理: 如果使用过 vpn 或者 shadowsocks 等FQ工具访问 Google,那么就是在使用正向代理服务器. 下面的图例解释了正向代理的使用.正向代理服务器在互联网中扮演用户的角色,

Reverse Linked List

题目: Reverse a singly linked list. cpp: class Solution { public: ListNode* reverseList(ListNode* head) { if(!head || !head->next) return head; ListNode *p1 = head; ListNode *p2 = head->next; ListNode *p3 = head->next->next; p1->next = nullpt

Reverse Integer - 反转一个int,溢出时返回0

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 若反转的数溢出,直接返回0 可以用计算结果来判断溢出,也可以用因数来判断 Java代码实现: 1 public class ReverseInteger { 2 public static int reverseInt(int x){ 3 if (x == 0) { 4 return

Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to show spoilers. Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have already thought throug

leetcode 25: Reverse Nodes in k-Group

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is. You may not alter the values in the nodes, only nod

Leetcode: Reverse Words in a String

Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". Clarification: What constitutes a word? A sequence of non-space characters constitutes a word. Could the input

DJango — URL的Reverse和Resolve

DJango系列的上一篇我们讲到了它是怎么解析和匹配URL的,并从URL中提取一些有用的信息(曾以year和month为例);但是,URL的管理仍然是一个巨大的工程,我们不得不维护数量庞大的pattern,即使有正则表达式的支持.另一方面,URL数量的增大也将带来匹配和解析正确性的考验.这一篇我们会进一步深入URL的学习,并掌握Reverse和Resolve. 一:Reverse和Resolve的作用我们可以为某一个url映射定义一个名字,称之为url_name,这样有什么用呢?在此之前我们先介