吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.40881110.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

領取今日簽到獎勵
查看: 10616|回復: 76
上一主題 下一主題

[CTF] 九月份安恒杯月賽之NewDriver

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2018-9-22 22:34 回帖獎勵
本帖最后由 yechen123 于 2018-9-24 17:13 編輯

這道題解了好久  發現大佬48分鐘拿下了一血 果然還是自己太菜了
果然還是得多練 以后練多一點發多一點帖子

先上傳附件
NewDrive.rar (3.93 KB, 下載次數: 43)
鏈接: https://pan.baidu.com/s/1aO55f6nJ2UOpfukyJanovA 提取碼: adjt  沒有CB看這里

PS:如果想找到快速解題的方法 可以看看評論區各位大佬的方法 如果想一步一步調出來 也可以看看這個帖子

無殼 直接用IDA打開分析

有個flag  但是明顯不是正確的flag  猜測后面會用的上 先記著

f5顯示分析失敗  應該出題人動了手腳 對這個分析不深
用od分析試試

查找字符  發現有input flag:

直接定位關鍵點代碼

[Asm] 純文本查看 復制代碼
00D41280   $  55            push ebp
00D41281   .  8BEC          mov ebp,esp
00D41283   .  81EC 38020000 sub esp,238
00D41289   .  A1 0030D400   mov eax,dword ptr ds:[D43000]
00D4128E   .  33C5          xor eax,ebp
00D41290   .  8945 FC       mov dword ptr ss:[ebp-4],eax
00D41293   .  53            push ebx
00D41294   .  56            push esi
00D41295   .  57            push edi
00D41296   .  68 FF000000   push 0FF                                 ; /n = FF (255.)
00D4129B   .  8D85 C9FDFFFF lea eax,dword ptr ss:[ebp-237]           ; |
00D412A1   .  6A 00         push 0                                   ; |c = 00
00D412A3   .  50            push eax                                 ; |s
00D412A4   .  C685 C8FDFFFF>mov byte ptr ss:[ebp-238],0              ; |
00D412AB   .  E8 E4080000   call <jmp.&MSVCR100.memset>              ; \memset
00D412B0   .  B9 08000000   mov ecx,8
00D412B5   .  BE 9421D400   mov esi,5ba358a4.00D42194                ;  flag{this_is_not_the_flag_hahaha}
00D412BA   .  8DBD C8FEFFFF lea edi,dword ptr ss:[ebp-138]
00D412C0   .  F3:A5         rep movs dword ptr es:[edi],dword ptr ds>
00D412C2   .  68 DE000000   push 0DE                                 ; /n = DE (222.)
00D412C7   .  8D8D EAFEFFFF lea ecx,dword ptr ss:[ebp-116]           ; |
00D412CD   .  6A 00         push 0                                   ; |c = 00
00D412CF   .  51            push ecx                                 ; |s
00D412D0   .  66:A5         movs word ptr es:[edi],word ptr ds:[esi] ; |
00D412D2   .  E8 BD080000   call <jmp.&MSVCR100.memset>              ; \memset
00D412D7   .  8B1D 9C20D400 mov ebx,dword ptr ds:[<&MSVCR100.printf>>;  MSVCR100.printf
00D412DD   .  68 B821D400   push 5ba358a4.00D421B8                   ; /input flag:\n
00D412E2   .  FFD3          call ebx                                 ; \printf
00D412E4   .  8D55 C8       lea edx,dword ptr ss:[ebp-38]
00D412E7   .  52            push edx
00D412E8   .  68 C821D400   push 5ba358a4.00D421C8                   ; /%50s
00D412ED   .  FF15 A420D400 call dword ptr ds:[<&MSVCR100.scanf>]    ; \scanf
00D412F3   .  83C4 24       add esp,24
00D412F6   .  50            push eax
00D412F7   .  33C0          xor eax,eax
00D412F9   .  74 03         je short 5ba358a4.00D412FE
00D412FB   .  83C4 1E       add esp,1E
00D412FE   >  58            pop eax
00D412FF   .  8D45 C8       lea eax,dword ptr ss:[ebp-38]            ;  ascii
00D41302   .  8D50 01       lea edx,dword ptr ds:[eax+1]             ;  ascii
00D41305   >  8A08          mov cl,byte ptr ds:[eax]
00D41307   .  40            inc eax
00D41308   .  84C9          test cl,cl
00D4130A   .^ 75 F9         jnz short 5ba358a4.00D41305
00D4130C   .  2BC2          sub eax,edx                              ;  上面就是計算長度
00D4130E   .  83F8 21       cmp eax,21                               ;  21
00D41311   .  75 7D         jnz short 5ba358a4.00D41390
00D41313   .  8D45 C8       lea eax,dword ptr ss:[ebp-38]
00D41316   .  E8 45FEFFFF   call 5ba358a4.00D41160                   ;  第一個加密
00D4131B   .  8BF0          mov esi,eax
00D4131D   .  8D85 C8FEFFFF lea eax,dword ptr ss:[ebp-138]
00D41323   .  8D50 01       lea edx,dword ptr ds:[eax+1]
00D41326   >  8A08          mov cl,byte ptr ds:[eax]
00D41328   .  40            inc eax
00D41329   .  84C9          test cl,cl
00D4132B   .^ 75 F9         jnz short 5ba358a4.00D41326
00D4132D   .  2BC2          sub eax,edx
00D4132F   .  50            push eax
00D41330   .  8D85 C8FEFFFF lea eax,dword ptr ss:[ebp-138]
00D41336   .  50            push eax
00D41337   .  8DBD C8FDFFFF lea edi,dword ptr ss:[ebp-238]
00D4133D   .  E8 BEFCFFFF   call 5ba358a4.00D41000
00D41342   .  8BC6          mov eax,esi
00D41344   .  83C4 08       add esp,8
00D41347   .  8D50 01       lea edx,dword ptr ds:[eax+1]
00D4134A   .  8D9B 00000000 lea ebx,dword ptr ds:[ebx]
00D41350   >  8A08          mov cl,byte ptr ds:[eax]
00D41352   .  40            inc eax
00D41353   .  84C9          test cl,cl
00D41355   .^ 75 F9         jnz short 5ba358a4.00D41350
00D41357   .  2BC2          sub eax,edx
00D41359   .  50            push eax                                 ; /Arg2
00D4135A   .  56            push esi                                 ; |Arg1
00D4135B   .  8D85 C8FDFFFF lea eax,dword ptr ss:[ebp-238]           ; |
00D41361   .  E8 7AFDFFFF   call 5ba358a4.00D410E0                   ; \5ba358a4.00D410E0
00D41366   .  83C4 08       add esp,8
00D41369   .  33C0          xor eax,eax
00D4136B   .  81EE 0421D400 sub esi,5ba358a4.00D42104
00D41371   >  8A8C06 0421D4>mov cl,byte ptr ds:[esi+eax+D42104]
00D41378   .  3A88 0421D400 cmp cl,byte ptr ds:[eax+D42104]
00D4137E      75 23         jnz short 5ba358a4.00D413A3
00D41380   .  40            inc eax
00D41381   .  83F8 2C       cmp eax,2C
00D41384   .^ 7C EB         jl short 5ba358a4.00D41371
00D41386   .  68 7C21D400   push 5ba358a4.00D4217C                   ;  Congratulation!!!!!!\n
00D4138B   .  FFD3          call ebx
00D4138D   .  83C4 04       add esp,4
00D41390   >  8B4D FC       mov ecx,dword ptr ss:[ebp-4]
00D41393   .  5F            pop edi
00D41394   .  5E            pop esi
00D41395   .  33CD          xor ecx,ebp
00D41397   .  33C0          xor eax,eax
00D41399   .  5B            pop ebx
00D4139A   .  E8 0D000000   call 5ba358a4.00D413AC
00D4139F   .  8BE5          mov esp,ebp
00D413A1   .  5D            pop ebp


[Asm] 純文本查看 復制代碼
00D4130E   .  83F8 21       cmp eax,21                               ;  21 



判斷輸入字符長度
長度為0x21

分析了下

這個程序有兩層加密
第一層在00D41316   .  E8 45FEFFFF   call 5ba358a4.00D41160                   ;  第一個加密
主要是把輸入字符串按照里面的字母表替換
第二層在00D41361   .  E8 7AFDFFFF   call 5ba358a4.00D410E0                   ; \5ba358a4.00D410E0
主要是對替換過后的字符進行異或加密

最后再跟一串字符比較 如果全部相等就輸出成功字符
[Asm] 純文本查看 復制代碼
00D41366   .  83C4 08       add esp,8
00D41369   .  33C0          xor eax,eax
00D4136B   .  81EE 0421D400 sub esi,5ba358a4.00D42104
00D41371   >  8A8C06 0421D4>mov cl,byte ptr ds:[esi+eax+D42104]
00D41378   .  3A88 0421D400 cmp cl,byte ptr ds:[eax+D42104]
00D4137E      75 23         jnz short 5ba358a4.00D413A3
00D41380   .  40            inc eax
00D41381   .  83F8 2C       cmp eax,2C
00D41384   .^ 7C EB         jl short 5ba358a4.00D41371
00D41386   .  68 7C21D400   push 5ba358a4.00D4217C                   ;  Congratulation!!!!!!\n
00D4138B   .  FFD3          call ebx



先把最后比較的字符提取出來 然后用逆著寫腳本解密這串字符
20 C3 1A AE 97 3C 7A 41 DE F6 78 15 CB 4B 4C DC 26 55 8B 55 E5 E9 55 75 40 3D 82 13 A5 60 13 3B F5 D8 19 0E 47 CF 5F 5E DE 9D 14 BD


然后分析第二層加密
[Asm] 純文本查看 復制代碼
00D410E0  /$  55            push ebp
00D410E1  |.  8BEC          mov ebp,esp
00D410E3  |.  56            push esi
00D410E4  |.  57            push edi
00D410E5  |.  33C9          xor ecx,ecx
00D410E7  |.  33F6          xor esi,esi
00D410E9  |.  33FF          xor edi,edi
00D410EB  |.  394D 0C       cmp [arg.2],ecx
00D410EE  |.  76 5E         jbe short 5ba358a4.00D4114E
00D410F0  |.  53            push ebx
00D410F1  |>  41            /inc ecx                                 ;  v5
00D410F2  |.  81E1 FF000080 |and ecx,800000FF                        ;  v3 = (v3 + 1) % 256;
00D410F8  |.  79 08         |jns short 5ba358a4.00D41102
00D410FA  |.  49            |dec ecx
00D410FB  |.  81C9 00FFFFFF |or ecx,FFFFFF00
00D41101  |.  41            |inc ecx
00D41102  |>  8A1401        |mov dl,byte ptr ds:[ecx+eax]            ;  ff740  *(_BYTE *)(v3 + result);
00D41105  |.  0FB6DA        |movzx ebx,dl
00D41108  |.  03F3          |add esi,ebx                             ;  v6 + v4)
00D4110A  |.  81E6 FF000080 |and esi,800000FF                        ;  v4 = (v6 + v4) % 256;
00D41110  |.  79 08         |jns short 5ba358a4.00D4111A
00D41112  |.  4E            |dec esi
00D41113  |.  81CE 00FFFFFF |or esi,FFFFFF00
00D41119  |.  46            |inc esi
00D4111A  |>  0FB61C06      |movzx ebx,byte ptr ds:[esi+eax]         ;  *(_BYTE *)(v4 + result);
00D4111E  |.  881C01        |mov byte ptr ds:[ecx+eax],bl            ;  *(_BYTE *)(v3 + result) = *(_BYTE *)(v4 + result);
00D41121  |.  881406        |mov byte ptr ds:[esi+eax],dl            ;   *(_BYTE *)(v4 + result) = v6;
00D41124  |.  0FB61C01      |movzx ebx,byte ptr ds:[ecx+eax]         ;  (v3 + result))
00D41128  |.  0FB6D2        |movzx edx,dl
00D4112B  |.  03DA          |add ebx,edx                             ;  v6 + *(unsigned __int8 *)(v3 + result)
00D4112D  |.  81E3 FF000080 |and ebx,800000FF                        ;  v6 + *(unsigned __int8 *)(v3 + result)) % 256
00D41133  |.  79 08         |jns short 5ba358a4.00D4113D
00D41135  |.  4B            |dec ebx
00D41136  |.  81CB 00FFFFFF |or ebx,FFFFFF00
00D4113C  |.  43            |inc ebx
00D4113D  |>  0FB61C03      |movzx ebx,byte ptr ds:[ebx+eax]         ;  *(_BYTE *)((v6 + *(unsigned __int8 *)(v3 + result)) % 256 + result);
00D41141  |.  8B55 08       |mov edx,[arg.1]
00D41144  |.  301C17        |xor byte ptr ds:[edi+edx],bl            ;  7a a6 6a
00D41147  |.  47            |inc edi
00D41148  |.  3B7D 0C       |cmp edi,[arg.2]
00D4114B  |.^ 72 A4         \jb short 5ba358a4.00D410F1
00D4114D  |.  5B            pop ebx
00D4114E  |>  5F            pop edi
00D4114F  |.  5E            pop esi
00D41150  |.  5D            pop ebp
00D41151  \.  C3            retn


這段程序主要是經過亂七八糟的運算 然后根據運算取出內存中的值用來跟輸入的字符異或

這就表示 取出內存中的值是不會變的

這段加密程序的話  有點復雜 寫腳本解密花的時間也有點多
主要看關鍵點
[Asm] 純文本查看 復制代碼
00D4113D  |> \0FB61C03      |movzx ebx,byte ptr ds:[ebx+eax]         ;提取內存中的數據
00D41141  |.  8B55 08       |mov edx,[arg.1]
00D41144  |.  301C17        |xor byte ptr ds:[edi+edx],bl            ;跟字符串異或加密 

這個時候  只要不斷摁f4  把內存中的數據提取出來就行
7a a6 6a da cd 0f 16 74 8b be 29 67 aa 79 79 b2 42 64 b2 2c bc 93 18 07 19 6f b7 64 fd 52 59 4f 96 ea 49 3c 11 89 66 39 87 d3 59 84

然后用python寫腳本解密
[Asm] 純文本查看 復制代碼
key = '7a a6 6a da cd 0f 16 74 8b be 29 67 aa 79 79 b2 42 64 b2 2c bc 93 18 07 19 6f b7 64 fd 52 59 4f 96 ea 49 3c 11 89 66 39 87 d3 59 84'
en_flag = '20 C3 1A AE 97 3C 7A 41 DE F6 78 15 CB 4B 4C DC 26 55 8B 55 E5 E9 55 75 40 3D 82 13 A5 60 13 3B F5 D8 19 0E 47 CF 5F 5E DE 9D 14 BD'
key = key.split(' ')
en_flag = en_flag.split(' ')
en_flags = []
keys = []

g = ''
for i in key:
        keys.append(int(i, 16))
for i in en_flag:
        en_flags.append(int(i, 16))

for q in range(len(key)):
        g += chr(keys[q]^en_flags[q])
print g

得到這段字符

ZeptZ3l5UHQra25nd19yYzMrYR5wX2Jtc2P2VF9gYNM9


再看第一層加密
代碼篇幅有點多

我主要列出重要的
[Asm] 純文本查看 復制代碼
00D411DA  |.  8D9B 00000000 lea ebx,dword ptr ds:[ebx]
00D411E0  |>  6A 03         /push 3                                  ; /maxlen = 3
00D411E2  |.  8D55 F8       |lea edx,[local.2]                       ; |
00D411E5  |.  53            |push ebx                                ; |src
00D411E6  |.  33FF          |xor edi,edi                             ; |
00D411E8  |.  52            |push edx                                ; |dest
00D411E9  |.  897D F8       |mov [local.2],edi                       ; |
00D411EC  |.  FF15 A020D400 |call dword ptr ds:[<&MSVCR100.strncpy>] ; \strncpy
00D411F2  |.  8D4D F8       |lea ecx,[local.2]                       ;  _is
00D411F5  |.  83C4 0C       |add esp,0C
00D411F8  |.  33C0          |xor eax,eax
00D411FA  |.  8D71 01       |lea esi,dword ptr ds:[ecx+1]
00D411FD  |.  8D49 00       |lea ecx,dword ptr ds:[ecx]
00D41200  |>  8A11          |/mov dl,byte ptr ds:[ecx]               ;  _
00D41202  |.  41            ||inc ecx
00D41203  |.  84D2          ||test dl,dl
00D41205  |.^ 75 F9         |\jnz short 5ba358a4.00D41200
00D41207  |.  2BCE          |sub ecx,esi
00D41209  |.  8BD1          |mov edx,ecx
00D4120B  |.  74 16         |je short 5ba358a4.00D41223
00D4120D  |.  B9 10000000   |mov ecx,10
00D41212  |>  0FBE7405 F8   |/movsx esi,byte ptr ss:[ebp+eax-8]      ;  _
00D41217  |.  D3E6          ||shl esi,cl                             ;  10 69 00
00D41219  |.  40            ||inc eax                                ;  740000 5F00 74
00D4121A  |.  83E9 08       ||sub ecx,8
00D4121D  |.  0BFE          ||or edi,esi
00D4121F  |.  3BC2          ||cmp eax,edx
00D41221  |.^ 72 EF         |\jb short 5ba358a4.00D41212
00D41223  |>  33C0          |xor eax,eax
00D41225  |.  8D72 01       |lea esi,dword ptr ds:[edx+1]            ;  04
00D41228  |.  8D48 12       |lea ecx,dword ptr ds:[eax+12]           ;  12
00D4122B  |.  EB 03         |jmp short 5ba358a4.00D41230
00D4122D  |   8D49 00       |lea ecx,dword ptr ds:[ecx]
00D41230  |>  3BF0          |/cmp esi,eax
00D41232  |.  76 15         ||jbe short 5ba358a4.00D41249
00D41234  |.  8B5D FC       ||mov ebx,[local.1]
00D41237  |.  8BD7          ||mov edx,edi
00D41239  |.  D3FA          ||sar edx,cl                             ;   12 0C 06 00
00D4123B  |.  83E2 3F       ||and edx,3F
00D4123E  |.  8A92 3821D400 ||mov dl,byte ptr ds:[edx+D42138]        ;  主要是這兩步
00D41244  |.  881403        ||mov byte ptr ds:[ebx+eax],dl
00D41247  |.  EB 07         ||jmp short 5ba358a4.00D41250
00D41249  |>  8B55 FC       ||mov edx,[local.1]
00D4124C  |.  C60402 3D     ||mov byte ptr ds:[edx+eax],3D
00D41250  |>  83E9 06       ||sub ecx,6
00D41253  |.  40            ||inc eax
00D41254  |.  83F9 FA       ||cmp ecx,-6
00D41257  |.^ 7F D7         |\jg short 5ba358a4.00D41230
00D41259  |.  8B5D F0       |mov ebx,[local.4]
00D4125C  |.  8345 FC 04    |add [local.1],4
00D41260  |.  83C3 03       |add ebx,3
00D41263  |.  FF4D EC       |dec [local.5]
00D41266  |.  895D F0       |mov [local.4],ebx
00D41269  |.^ 0F85 71FFFFFF \jnz 5ba358a4.00D411E0
00D4126F  |>  8B45 F4       mov eax,[local.3]
00D41272  |.  5F            pop edi
00D41273  |.  5E            pop esi
00D41274  |.  5B            pop ebx
00D41275  |.  8BE5          mov esp,ebp
00D41277  |.  5D            pop ebp
00D41278  \.  C3            retn

主要思路是
循環strlen(input)/3次
一開始會把輸入字符串復制到另一塊內存區域 長度為3
[Asm] 純文本查看 復制代碼
00D411E0  |> /6A 03         /push 3                                  ; /maxlen = 3
00D411E2  |. |8D55 F8       |lea edx,[local.2]                       ; |
00D411E5  |. |53            |push ebx                                ; |src
00D411E6  |. |33FF          |xor edi,edi                             ; |
00D411E8  |. |52            |push edx                                ; |dest
00D411E9  |. |897D F8       |mov [local.2],edi                       ; |
00D411EC  |. |FF15 A020D400 |call dword ptr ds:[<&MSVCR100.strncpy>] ; \strncpy


然后會把輸入字符 換成ascii碼 左移  第一個字符左移四位(16進制下) 第二個字符左移兩位最后一個字符不左移 再相加起來
比如fla  最后會變成00666C61
[Asm] 純文本查看 復制代碼
00D41212  |> /0FBE7405 F8   |/movsx esi,byte ptr ss:[ebp+eax-8]                      ;  _
00D41217  |. |D3E6          ||shl esi,cl                                             ; 
00D41219  |. |40            ||inc eax                                                ;
00D4121A  |. |83E9 08       ||sub ecx,8
00D4121D  |. |0BFE          ||or edi,esi
00D4121F  |. |3BC2          ||cmp eax,edx
00D41221  |.^\72 EF         |\jb short 5ba358a4.00D41212



在最后 得到的數值00666C61  右移后 使用and保留最后6位(二進制下)
循環四次 第一次右移移動了18位(2進制)
第二次右移移動了12位
第三次右移移動了6位
最后一次不右移
00666C61 轉成2進制是24位的
and 0x3f 只保留最低6位
所以 四次 恰好能保存 這個24位的數值(00666C61)
然后在用經過加密后的數值+D42138 后當做地址取出里面的值
看了下內容 是個字母表ABCDEFGHIJSTUVWK
LMNOPQRXYZabcdqr
stuvwxefghijklmn
opyz0123456789+
附上代碼
[Asm] 純文本查看 復制代碼
00D41230  |>  3BF0          |/cmp esi,eax
00D41232  |. |76 15         ||jbe short 5ba358a4.00D41249
00D41234  |. |8B5D FC       ||mov ebx,[local.1]
00D41237  |. |8BD7          ||mov edx,edi
00D41239  |. |D3FA          ||sar edx,cl                                             ;   12 0C 06 00
00D4123B  |. |83E2 3F       ||and edx,3F
00D4123E  |. |8A92 3821D400 ||mov dl,byte ptr ds:[edx+D42138]                        ;  主要是這兩步
00D41244  |. |881403        ||mov byte ptr ds:[ebx+eax],dl
00D41247  |. |EB 07         ||jmp short 5ba358a4.00D41250
00D41249  |> |8B55 FC       ||mov edx,[local.1]
00D4124C  |. |C60402 3D     ||mov byte ptr ds:[edx+eax],3D
00D41250  |> |83E9 06       ||sub ecx,6
00D41253  |. |40            ||inc eax
00D41254  |. |83F9 FA       ||cmp ecx,-6
00D41257  |.^\7F D7         |\jg short 5ba358a4.00D41230
00D41259  |.  8B5D F0       |mov ebx,[local.4]
00D4125C  |.  8345 FC 04    |add [local.1],4
00D41260  |.  83C3 03       |add ebx,3
00D41263  |.  FF4D EC       |dec [local.5]
00D41266  |.  895D F0       |mov [local.4],ebx
00D41269  |.^ 0F85 71FFFFFF \jnz 5ba358a4.00D411E0




到了這里 這層加密的主要思路是 主循環循環len(input)/3 次

先復制內容到另一段內存  長度為三
然后取出字符左移儲存
在循環四次  每次把數值右移 在進行and 0x3f截斷數值
最后得到這個數值+D42138 取出字母當做密文
最后得到
ZeptZ3l5UHQra25nd19yYzMrYR5wX2Jtc2P2VF9gYNM9
可以根據這段密文解密

直接上腳本 用C寫比較方便一些
[Asm] 純文本查看 復制代碼
#include <stdio.h>


int main()
{
    char asciis[62] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'S', 'T', 'U', 'V', 'W', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    char encrypt[44] = {'Z', 'e', 'p', 't', 'Z', '3', 'l', '5', 'U', 'H', 'Q', 'r', 'a', '2', '5', 'n', 'd', '1', '9', 'y', 'Y', 'z', 'M', 'r', 'Y', 'R', '5', 'w', 'X', '2', 'J', 't', 'c', '2', 'P', '2', 'V', 'F', '9', 'g', 'Y', 'N', 'M', '9'};
    int base[4];
    int flag[3];

    for(int i=43; i>=0; i=i-4)
    {
        base[3] = i;
        base[2] = i-1;
        base[1] = i-2;
        base[0] = i-3;
        //下面找出字母在字母表中對應的位置
        flag[0] = 0;
        flag[1] = 0;
        flag[2] = 0;
        flag[3] = 0;
        for(int count=3; count>=0; --count)
        {
            for(int counts=0; counts<62; counts++)
            {
                if(encrypt[base[count]] == asciis[counts])
                {
                    flag[count] = counts;
                    break;
                }
            }
        }
        flag[2] = flag[2] * 0x40;
        flag[1] = flag[1] * 0x1000;
        flag[0] = flag[0] * 0x40000;
        printf("%x\n", flag[0]+flag[1]+flag[2]+flag[3]);

    }


    return 0;
}


好了 可以看到下面的字符 是fla  這些數字是16進制的

可以用python寫腳本輸出
[Asm] 純文本查看 復制代碼
i = '666c61677b7930755f6b6e6f775f7263345f616e645f6261736536345f6861247d'
jjj = ''

for j in range(0, len(i), 2):
        jjj += chr(int(i[j:j+2], 16))

print jjj





寫得比較匆忙  望見諒
果然還是自己太菜了 寫解密腳本拖了好久

這個flag提到 base64和 rc4  是不是還有更快的解法 希望有能力的大佬給看看

免費評分

參與人數 19吾愛幣 +20 熱心值 +19 收起 理由
loberd + 1 熱心回復!
kiki09 + 1 + 1 我很贊同!
hackeydg + 1 + 1 用心討論,共獲提升!
AngelEyes145 + 1 + 1 用心討論,共獲提升!
jnez112358 + 1 + 1 [email protected]
〆★→縹ら緲 + 1 + 1 我很贊同!
上官逸風 + 1 + 1 熱心回復!
youhen233 + 1 + 1 [email protected]
Akesudia + 1 + 1 用心討論,共獲提升!
sunnylds7 + 1 + 1 熱心回復!
poisonbcat + 1 + 1 用心討論,共獲提升!
成長 + 2 + 1 用心討論,共獲提升!
kazuya0102 + 2 + 1 我是來增加人氣的
quleilei889 + 1 + 1 熱心回復!
koreancoco + 1 + 1 我很贊同!
如實知見 + 1 + 1 [email protected]
天之哀傷 + 1 + 1 [email protected]
薛定樂 + 1 + 1 熱心回復!
zhukai055 + 1 + 1 這個就是RC4+Base64(密碼表更換)

查看全部評分

發帖求助前要善用論壇搜索功能,那里可能會有你要找的答案;

如果你在論壇求助問題,并且已經從壇友或者管理的回復中解決了問題,請把帖子分類或者標題加上【已解決】

如何回報幫助你解決問題的壇友,一個好辦法就是給對方加【熱心】,加分不會扣除自己的積分,做一個熱心并受歡迎的人!

推薦
發表于 2018-9-23 22:22
yechen123 發表于 2018-9-23 22:07
22號的安恒杯月賽,不是很懂那些加密算法識別,所以只能硬著頭皮反匯編一步一步分解,還是得多看看識別算 ...

這個程序比較簡陋,算法也很常見,出題人還耍小聰明

棧平衡一下就行了,不過也沒啥用 main函數處理的也很簡潔



一步一步調也能做,反正結果是異或出來的,把中間過程生成用來異或的值拿出來,跟 要結果異或一下就行了。

免費評分

參與人數 2吾愛幣 +9 熱心值 +2 收起 理由
SpongeB0B + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
Hmily + 8 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!

查看全部評分

推薦
發表于 2018-9-23 09:44
第一個call base64加密(改了密碼表)
第二個call rc4 第一步:生成密碼表
第三個call rc4 第二步:加密()

免費評分

參與人數 1吾愛幣 +8 熱心值 +1 收起 理由
Hmily + 8 + 1 用心討論,共獲提升!

查看全部評分

沙發
發表于 2018-9-22 23:28
3#
發表于 2018-9-22 23:52
旁觀者看看熱鬧            
4#
 樓主| 發表于 2018-9-22 23:55 |樓主

咋了。。。。
5#
發表于 2018-9-23 00:00

頂你上去老鐵  咱只是個門外漢 不懂你們這些代碼
6#
發表于 2018-9-23 08:14
感謝樓主分享,支持一下!
7#
發表于 2018-9-23 08:41
看我一臉茫然,目前學術不高,等我提高我會回來回顧一下的
8#
發表于 2018-9-23 09:16

感謝樓主分享,支持一下!
10#
 樓主| 發表于 2018-9-23 09:59 |樓主
zhukai055 發表于 2018-9-23 09:44
第一個call base64加密(改了密碼表)
第二個call rc4 第一步:生成密碼表
第三個call rc4 第二步:加密 ...

多謝指點
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則


免責聲明:
吾愛破解所發布的一切破解補丁、注冊機和注冊信息及軟件的解密分析文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。如有侵權請郵件與我們聯系處理。

Mail To:[email protected]

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|手機版|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-3-19 17:06

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
球探网篮球指数