• 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

     

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

     

     

  • 相关阅读:
    使用Distinct()内置方法对List集合的去重 问题
    TCP连接与HTTP请求
    ASP.NET MVC 使用 Authorize 属性过滤器验证用户是否已登录
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    关于设计模式的六大原则
    C# WebApi 接口传参详解
    数据库数据流量太大-问题诊断
    docker的build生成镜像和启动container
    docker生成dotnet core镜像
    NET Core 源码浏览站点工具
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6727853.html
Copyright © 2020-2023  润新知