菜鸟学破解:1.Feiq等级设置;2.文件解密
菜鸟学破解:1.Feiq等级设置
公司内部聊天软件用的是Feiq,像QQ那样也有太阳月亮星星等级,不过是用授权码方式进行设置。
用OD打开运行Feiq,在汇编窗口右键选择“查找”“所有模块中的名字”,找出MessageBoxA打上断点。
打开Feiq的等级设置窗口,随便填个授权码,按确定跑到MessageBoxA的断点处,可见执行这个函数后会弹出“授权码不正确”的窗口;返回上一个函数,会发现这里分别有两个地方调用MessageBoxA,稍往前观察可得"00463503 . 74 25 je short 0046352A"这里的决定调用哪个MessageBoxA;猜想这里就是判断授权码对错的分支,把je改成jne后再运行等级设置,断点后弹出“授权码正确”的窗口。
因此,把Feiq.exe中那个地方的je改成jne,以后运行这个exe就可以随意进行等级设置了。
=========================================================
00463480 . 6A FF push -1
00463482 . 68 D8505800 push 005850D8 ; SE 处理程序安装
00463487 . 64:A1 0000000>mov eax, dword ptr fs:[0]
0046348D . 50 push eax
0046348E . 64:8925 00000>mov dword ptr fs:[0], esp
00463495 . 83EC 08 sub esp, 8
00463498 . 53 push ebx
00463499 . 56 push esi
0046349A . 57 push edi
0046349B . 8BF9 mov edi, ecx
0046349D . 6A 01 push 1
0046349F . E8 C27E1000 call 0056B366
004634A4 . 8B47 68 mov eax, dword ptr [edi+68]
004634A7 . 8D57 60 lea edx, dword ptr [edi+60]
004634AA . 50 push eax
004634AB . 51 push ecx
004634AC . 8BCC mov ecx, esp
004634AE . 896424 18 mov dword ptr [esp+18], esp
004634B2 . 52 push edx
004634B3 . E8 C94F1000 call 00568481
004634B8 . 8D4424 14 lea eax, dword ptr [esp+14]
004634BC . 50 push eax
;;;;;;;;;;;;;;;;;;;;;;;;传入机器标识码,算出授权码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
004634BD . E8 0E040300 call 004938D0
004634C2 . 83C4 0C add esp, 0C
004634C5 . 8B77 64 mov esi, dword ptr [edi+64]
004634C8 . 8B4424 0C mov eax, dword ptr [esp+C]
004634CC . C74424 1C 000>mov dword ptr [esp+1C], 0
004634D4 > 8A10 mov dl, byte ptr [eax]
004634D6 . 8A1E mov bl, byte ptr [esi]
004634D8 . 8ACA mov cl, dl
;;;;;;;;;;;;;;;;;;;;;;;;比较输入的字符串和授权码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
004634DA . 3AD3 cmp dl, bl
004634DC . 75 1E jnz short 004634FC
004634DE . 84C9 test cl, cl
004634E0 . 74 16 je short 004634F8
004634E2 . 8A50 01 mov dl, byte ptr [eax+1]
004634E5 . 8A5E 01 mov bl, byte ptr [esi+1]
004634E8 . 8ACA mov cl, dl
004634EA . 3AD3 cmp dl, bl
004634EC . 75 0E jnz short 004634FC
004634EE . 83C0 02 add eax, 2
004634F1 . 83C6 02 add esi, 2
004634F4 . 84C9 test cl, cl
004634F6 .^ 75 DC jnz short 004634D4
004634F8 > 33C0 xor eax, eax
004634FA . EB 05 jmp short 00463501
004634FC > 1BC0 sbb eax, eax
004634FE . 83D8 FF sbb eax, -1
00463501 85C0 test eax, eax
;;;;;;;;;;;;;;;;;;;;;;;;跳转至“授权码正确”对话框;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00463503 . 74 25 je short 0046352A
00463505 . 68 D8E75F00 push 005FE7D8
0046350A . 8D4C24 10 lea ecx, dword ptr [esp+10]
0046350E . E8 82531000 call 00568895
00463513 . 8B47 5C mov eax, dword ptr [edi+5C]
00463516 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00463518 . 68 90755E00 push 005E7590 ; |Title = "提示"
0046351D . 50 push eax ; |Text
0046351E . 8B47 1C mov eax, dword ptr [edi+1C] ; |
00463521 . 50 push eax ; |hOwner
;;;;;;;;;;;;;;;;;;;;;;;;“授权码不正确”对话框;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00463522 . FF15 10775900 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
00463528 . EB 1D jmp short 00463547
0046352A > 8B4F 1C mov ecx, dword ptr [edi+1C]
0046352D . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0046352F . 68 74C65E00 push 005EC674 ; |Title = "成?,A6,""
00463534 . 68 64C65E00 push 005EC664 ; |Text = "授?,A8,"码正?,B7,"?,A1,""
00463539 . 51 push ecx ; |hOwner
;;;;;;;;;;;;;;;;;;;;;;;;“授权码正确”对话框;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0046353A . FF15 10775900 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
00463540 . 8BCF mov ecx, edi
00463542 . E8 384E1000 call 0056837F
00463547 > 8D4C24 0C lea ecx, dword ptr [esp+C]
0046354B . C74424 1C FFF>mov dword ptr [esp+1C], -1
00463553 . E8 B4511000 call 0056870C
00463558 . 8B4C24 14 mov ecx, dword ptr [esp+14]
0046355C . 5F pop edi
0046355D . 5E pop esi
0046355E . 64:890D 00000>mov dword ptr fs:[0], ecx
00463565 . 5B pop ebx
00463566 . 83C4 14 add esp, 14
00463569 . C3 retn
=========================================================
除了直接改跳转的方法,还可以直接找出它的授权码。在“决定性一跳”之前有个比较变量的地方,观察发现是把输入的授权码和一个字符串进行比较,这样不改exe,直接手工输入该字符串,也可以任意设置等级了。
然而,如果换了机器,这个字符串就无效了。可以想到授权码的生成和机器信息(如计算机标识码之类)有关,因此可以更进一步寻找授权码生成的方法,做成算号器。由于本人水平和时间有限,这部分没有完成。
菜鸟学破解:2.文件解密
公司最近启用加密策略,对某些项目文件进行自动加解密,这样文件就算带回家也打不开了。
随便新建了几个小文件,观察加密后的二进制,加密文件由大致三部分组成:密文、0填充区和附加信息。其中密文和原文长度一致,附加信息对于每个文件都是一样的。
初步猜测,加密应该是某种字符映射Hash算法,估计可以穷举暴力解密。
于是分别生成内容全部是0x00,0x01……0xFF的文件,对比自动加密后生成的文件,发现加密算法以4个bit为单位。一共有16种(f0:{0->0,1->1...},f1:{0->1,1->0...}...fF:{0->F,1->E...})映射,根据原文字节的位置选一种映射得到密文,对应可以表示为:(f8 f7) (fD f1) (f1 f2) (f7 fD) ...
至于对应某个位置应该选哪一种映射,从这里难以看出规律,而且找不到有循环周期;然而,如果只要有一个原文全是0x00的Nbyte的加密后文件,就可以此为参考很方便地得到每个位置的映射,从而可以解密小于Nbyte的加密文件。
=======原文:密文=====================================
00 00 00 ……: 87 D1 12 7D 4C 73 0D 4C 86 69 9A 66 08 ED EF DF ……
01 01 01 ……: 86 D0 13 7C 4D 72 0C 4D 87 68 9B 67 09 EC EE DE ……
02 02 02 ……: 85 D3 10 7F 4E 71 0F 4E 84 6B 98 64 0A EF ED DD ……
03 03 03 ……: 84 D2 11 7E 4F 70 0E 4F 85 6A 99 65 0B EE EC DC ……
04 04 04 ……: 83 D5 16 79 48 77 09 48 82 6D 9E 62 0C E9 EB DB ……
05 05 05 ……: 82 D4 17 78 49 76 08 49 83 6C 9F 63 0D E8 EA DA ……
06 06 06 ……: 81 D7 14 7B 4A 75 0B 4A 80 6F 9C 60 0E EB E9 D9 ……
07 07 07 ……: 80 D6 15 7A 4B 74 0A 4B 81 6E 9D 61 0F EA E8 D8 ……
08 08 08 ……: 8F D9 1A 75 44 7B 05 44 8E 61 92 6E 00 E5 E7 D7 ……
09 09 09 ……: 8E D8 1B 74 45 7A 04 45 8F 60 93 6F 01 E4 E6 D6 ……
0A 0A 0A ……: 8D DB 18 77 46 79 07 46 8C 63 90 6C 02 E7 E5 D5 ……
0B 0B 0B ……: 8C DA 19 76 47 78 06 47 8D 62 91 6D 03 E6 E4 D4 ……
0C 0C 0C ……: 8B DD 1E 71 40 7F 01 40 8A 65 96 6A 04 E1 E3 D3 ……
0D 0D 0D ……: 8A DC 1F 70 41 7E 00 41 8B 64 97 6B 05 E0 E2 D2 ……
0E 0E 0E ……: 89 DF 1C 73 42 7D 03 42 88 67 94 68 06 E3 E1 D1 ……
0F 0F 0F ……: 88 DE 1D 72 43 7C 02 43 89 66 95 69 07 E2 E0 D0 ……
……
====================================================
除了暴力,当然还有其他的办法。例如可以翻出进程里面调用的加解密模块,分析跟踪一下,还能找到选择映射的算法,这就一劳永逸,多大的文件都可以方便解密了。当然,本人还菜,只是有个想法,还没做出来。
这是我初学破解的小“成果”,和大家分享一下,也希望可以申请到邀请码
