欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
算法分析第一課
本帖最后由 LYQingYe 于 2015-8-27 18:35 編輯

幾天沒(méi)法教程,手癢癢。
因為是假期 13天 ,所以我打算弄一個(gè)算法分析系列教程?,F在是第一課,希望能得到大家的支持。
一邊分析一天寫(xiě)帖的,所以難免會(huì )有些錯誤,希望大家指出,共同學(xué)習進(jìn)步。
教程我就不隱藏了,回帖有錢(qián)領(lǐng)哦。  我發(fā)教程只為共同學(xué)習不為什么,只求大家熱心回復。中獎概率?。担埃ッ看危祲K錢(qián),我是窮人
軟件名稱(chēng):超級視頻合并軟件 V2.20
編譯器:貌似 Delphi6-7 無(wú)殼。

這個(gè)代碼框讓我數據丟失了兩次,我又重新編過(guò) 效果不是很好,真失敗。

正常情況下,打開(kāi)彈出一個(gè)NAG窗口 要你注冊還是試用,未注冊版本合并視頻后會(huì )有水印。下斷點(diǎn)
MessageboxA 就可以找到關(guān)鍵 CALL 在這是 算法課,我就不說(shuō)明了,很簡(jiǎn)單的。

從按鈕事件開(kāi)始  _TFrm_Reg_Btn_RegClick proc near   0057EAC8
  1. push    ebp
  2. mov     ebp, esp
  3. xor     ecx, ecx
  4. push    ecx
  5. push    ecx
  6. push    ecx
  7. push    ecx
  8. push    ecx
  9. push    ecx
  10. push    ebx
  11. mov     ebx, eax
  12. xor     eax, eax
  13. push    ebp
  14. push    offset loc_57EC4F
  15. push    dword ptr fs:[eax]
  16. mov     fs:[eax], esp
  17. lea     edx, [ebp+var_4]
  18. mov     eax, [ebx+304h] ; this
  19. call    @Controls@TControl@GetText$qqrv ;            TControl::GetText(void)  
  20. mov     eax, [ebp+var_4]                                         EAX = 用戶(hù)名   這里我們用 XUEPOJIE 來(lái)代替用戶(hù)名
  21. call    unknown_libname_81 ;                                   取用戶(hù)名長(cháng)度賦值給EAX
  22. test    eax, eax                                                         判斷 EAX 是否等于 0  用TEST EAX,EAX 是常用的方法來(lái)判斷一個(gè)寄存器內容是否為 0。
  23. jnz     short loc_57EB2A                                            不為0 則跳轉 到 LOC_57EB2A
  1. loc_57EB2A:
  2. lea     edx, [ebp+var_8]
  3. mov     eax, [ebx+308h] ; this
  4. call    @Controls@TControl@GetText$qqrv ;        GetText(void)
  5. mov     eax, [ebp+var_8]                                      EAX = 假注冊碼   這里我們用 8888888888888888888888888代替注冊碼。
  6. call    unknown_libname_81 ;                               取假碼長(cháng)度 給EAX
  7. test    eax, eax                                                     判斷假碼長(cháng)度是否為0
  8. jnz     short loc_57EB70                                        不為0則跳,必須要跳走。



loc_57EBFB  核心算法CALL  下面接著(zhù)分析
loc_57EBFB 里面有四個(gè) CALL  loc_004E0D24     loc_004E0B4C(包含全部算法代碼)   loc_004047E8   loc_00403D04

004E0B66         push    ebp
004E0B67         push    004E0D0A
004E0B6C         push    dword ptr fs:[eax]
004E0B6F         mov     dword ptr fs:[eax], esp
004E0B72         mov     eax, [local.1]
004E0B75         call    004043C0
004E0B7A         lea     edx, [local.4]
004E0B7D         mov     eax, edi
004E0B7F         call    004E0AE4
004E0B84         mov     eax, [local.4]                                  ;  EAX = 用戶(hù)名
004E0B87         call    0040469C                                        ;  計算的用戶(hù)名長(cháng)度
004E0B8C         mov     esi, eax
004E0B8E         test    esi, esi
004E0B90         jle     short 004E0BC2                                  ;  判斷 是否為 0
004E0B92         mov     ebx, 0x1                                        ;  ebx 初始化 為0
004E0B97         lea     edx, [local.6]
004E0B9A         mov     eax, edi
004E0B9C         call    004E0AE4
004E0BA1         mov     eax, [local.6]                                 ;  eax = 用戶(hù)名地址
004E0BA4         movzx   eax, byte ptr [eax+ebx-0x1]         ;  eax = 用戶(hù)名第一位 ASICC值
004E0BA9         lea     ecx, [local.5]
004E0BAC         xor     edx, edx
004E0BAE         call    00409528                                       ;  需要分析

第一層算法
004093C8         or      cl, cl        判斷cl是否為0?。悖臁。健。保肮潭ǖ?br>004093CA         jnz     short 004093E3   不為0不跳
004093CC         or      eax, eax


004093CE         jns     short 004093DE  
004093D0         neg     eax
004093D2         call    004093DE
004093D7         mov     al, 0x2D
004093D9         inc     ecx
004093DA         dec     esi
004093DB         mov     byte ptr [esi], al
004093DD         retn
004093DE         mov     ecx, 0xA


004093E3         push    edx
004093E4         push    esi
004093E5         xor     edx, edx                                        ;  edx 清零
004093E7         div     ecx                                               ;  此時(shí) eax =X的ASCII 值 58 eax / ecx 商在 eax 余數在 edx
004093E9         dec     esi                                               ;  esi - 1
004093EA         add     dl, 0x30                                       ;  余數 + 0x30
004093ED         cmp     dl, 0x3A                                      ;  小于則跳轉
004093F0         jb      short 004093F5
004093F2         add     dl, 0x7
004093F5         mov     byte ptr [esi], dl                          處理后的數據放到 esi指向的內存空間
004093F7         or      eax, eax                                       判斷 eax是否為0 為0不跳
004093F9         jnz     short 004093E5  

第一次循環(huán) : eax = 58 = 'X'   ecx = 10    eax/ecx  商=eax = 5 余數 = 8 =edx  余數+30 = 8+30= 38  放入 esi指向空間

第二次循環(huán) eax = 5  ecx = 10 eax /ecx 商 = 0 =eax  循環(huán)可以跳走了  余數 =edx = 5 余數 +30 =35  esi-1 放入 前一個(gè)字節的空間
相當于  35  38 我們在內存看下
  是不是感到很奇怪 這個(gè)數值 剛到 等于 一個(gè) 字符串 '58' 這個(gè)字符串 剛到等于 我們用戶(hù)名第一個(gè) 字符的 ASCII值, 所以 第一層算法 只是將  用戶(hù)名的 ASCII值 轉化為 字符串
ASCII '585545504F4A4945'


004E0BB3        mov     edx, [local.5]                                 ;  edx 等于 處理 后的 字符串
004E0BB6        lea     eax, [local.2]
004E0BB9         call    004046A4
004E0BBE        inc     ebx
004E0BBF         dec     esi
004E0BC0         jnz     short 004E0B97






004E0BB3      mov     edx, [local.5]                                 ;  edx 等于 處理后的字符串地址
004E0BB6      lea     eax, [local.2]
004E0BB9      call    004046A4
004E0BBE      inc     ebx
004E0BBF      dec     esi
004E0BC0      jnz     short 004E0B97

下面就是第二層算法 ,其實(shí)沒(méi)什么作用 
004E0BC2      mov     eax, [local.2]                                  ;  將 運算的 東東 放到eax
004E0BC5      call    0040469C                                        ;  將 這字符串 前 4個(gè) 字節的 內容 給 eax
004E0BCA      mov     esi, eax                                        ;  eax 給 esi
004E0BCC      test    esi, esi                                        ;  判斷 esi是否 為 0
004E0BCE      jle     short 004E0BFC
004E0BD0      mov     ebx, 0x1                                        ;  ebx 給  0x1  貌似要 計數器
004E0BD5      mov     eax, [local.2]                                 ;  運算后的 假嗎 給 eax
004E0BD8      call    0040469C                                       ;  還是 剛才 那樣 給前4個(gè)字節 數據 給 eax
004E0BDD      sub     eax, ebx                                       ;  eax- ebx
004E0BDF      mov     edx, [local.2]                                 ;  假嗎運算之 給 edx
004E0BE2      mov     dl, byte ptr [edx+eax]                         ;  第一次 取最后 一位
004E0BE5      lea     eax, [local.7]                                 ;  估計 又是 將此 東西 放入緩沖區
004E0BE8      call    004045A8                                       
004E0BED      mov     edx, [local.7]
004E0BF0      lea     eax, [local.3]
004E0BF3      call    004046A4
004E0BF8      inc     ebx
004E0BF9      dec     esi
004E0BFA      jnz     short 004E0BD5
第二層算法作用也就是 把第一層算法得出的字符串倒過(guò)來(lái)
ASCII '5494A4F405545585'

004E0BFC      lea     eax, [local.2]           將處理后的字符串 的二級指針給轉化為 一級指針給eax 這個(gè)是第一層算法算出的
004E0BFF      push    eax               壓入棧,保存起來(lái)
004E0C00      mov     ecx, 0x4            初始化變量?。澹幔。健。埃?/blockquote>
004E0C05      mov     edx, 0x1            初始化變量?。澹洌。健。埃?/blockquote>
004E0C0A      mov     eax, [local.3]                                  ;  將倒轉后的字符串也就是第二層算法 后的字符串地址給eax 
004E0C0D      call    004048FC            執行后?。澹幔。健〉罐D字符串前四個(gè)字節?。担矗梗础∽址亩壷羔?/blockquote>
004E0C12      lea     eax, [local.3]           二級指針給eax 轉換為 一級指針
004E0C15      push    eax              指針入?!”4?/blockquote>
004E0C16      mov     ecx, 0x4            初始化值
004E0C1B      mov     edx, 0x5            初始化值 
004E0C20      mov     eax, [local.3]          倒轉字符串地址給?。澹幔  ?/blockquote>
004E0C23      call    004048FC            執行后?。澹幔。健〉罐D后字符串 接著(zhù)在后四位?。矗粒疲醋址亩壷羔槨?/blockquote>
004E0C28      mov     eax, [local.2]          將前四位字符串地址給eax
004E0C2B      call    0040469C            計算出他的長(cháng)度
004E0C30      cmp     eax, 0x4            判斷長(cháng)度是否等于?。埃础〉扔趧t跳,我先撤了。已經(jīng)跳了
004E0C33      jge     short 004E0C64
004E0C35      mov     eax, [local.2]
004E0C38      call    0040469C
004E0C3D      mov     ebx, eax
004E0C3F      cmp     ebx, 0x3
004E0C42      jg      short 004E0C64
004E0C44      /lea     ecx, [local.8]
004E0C47      |mov     eax, ebx
004E0C49      |shl     eax, 0x2
004E0C4C      |xor     edx, edx
004E0C4E      |call    00409528
004E0C53      |mov     edx, [local.8]
004E0C56      |lea     eax, [local.2]
004E0C59      |call    004046A4
004E0C5E      |inc     ebx
004E0C5F      |cmp     ebx, 0x4
004E0C62      \jnz     short 004E0C44
004E0C64      mov     eax, [local.3]      接著(zhù)后四位的字符串地址給eax?。矗粒疲?/blockquote>
004E0C67      call    0040469C         計算器其長(cháng)度
004E0C6C      cmp     eax, 0x4         判斷長(cháng)度 跳了
004E0C6F      jge     short 004E0CA0
004E0C71      mov     eax, [local.3]
004E0C74      call    0040469C
004E0C79      mov     ebx, eax
004E0C7B      cmp     ebx, 0x3
004E0C7E      jg      short 004E0CA0
004E0C80      /lea     ecx, [local.9]
004E0C83      |mov     eax, ebx
004E0C85      |shl     eax, 0x2
004E0C88      |xor     edx, edx
004E0C8A      |call    00409528
004E0C8F      |mov     edx, [local.9]
004E0C92      |lea     eax, [local.3]
004E0C95      |call    004046A4
004E0C9A      |inc     ebx
004E0C9B      |cmp     ebx, 0x4
004E0C9E      \jnz     short 004E0C80
004E0CA0      lea     eax, [local.10]        
004E0CA3      push    eax
004E0CA4      mov     eax, dword ptr [edi+0x4]    在這產(chǎn)生一個(gè)新的字符串?。觯辏玻叮福觯玻埃保场〔灰婀诌@個(gè)字符串是固定的 就是這個(gè)軟件的exe名稱(chēng)和版本 
004E0CA7      mov     ecx, 0x4           
004E0CAC      mov     edx, 0x1
004E0CB1      call    004048FC             取前四位字符串?。觯辏玻?/blockquote>
004E0CB6      push    [local.10]
004E0CB9      push    004E0D20                                        ;  UNICODE '-'
004E0CBE      push    [local.2]
004E0CC1      lea     eax, [local.11]           
004E0CC4      push    eax
004E0CC5      mov     eax, dword ptr [edi+0x4]
004E0CC8      mov     ecx, 0x5
004E0CCD      mov     edx, 0x5
004E0CD2      call    004048FC           取后?。滴蛔址。福觯玻埃?/blockquote>
004E0CD7      push    [local.11]
004E0CDA      push    004E0D20                                        ;  UNICODE '-' 看到這 杠號是不是很熟悉啊,哈哈 你已經(jīng)拆到了
004E0CDF      push    [local.3]
004E0CE2      mov     eax, [local.1]
004E0CE5      mov     edx, 0x6
004E0CEA      call    0040475C
004E0CEF      xor     eax, eax
004E0CF1      pop     edx
004E0CF2      pop     ecx
004E0CF3      pop     ecx
004E0CF4      mov     dword ptr fs:[eax], edx
004E0CF7      push    004E0D11
004E0CFC      lea     eax, [local.11]
004E0CFF      mov     edx, 0xA
004E0D04      call    004043E4
到最后就是 將前面出現過(guò)的字符串組裝了,我就不廢話(huà)了 
vj26-54948v201-A4F4  ?。担矗梗词菍⒂脩?hù)名經(jīng)過(guò)二層算法獲得的前四個(gè)字節的字符串 
A4F4是在后四位的字符串 其他的就是這個(gè)軟件的?。澹迕Q(chēng)了 最后這個(gè)就是注冊碼了。。我們測試下。。

注冊成功,哈哈,肚子太餓了,我就偷懶下,寫(xiě)這個(gè)帖子花了我三個(gè)小時(shí),邊分析邊寫(xiě)帖子,大伙給我點(diǎn)動(dòng)力把。一路 艱難險阻是不是都過(guò)來(lái)了?是否體驗到算法帶來(lái)的成就感?本次教程到此結束,我是?。蹋伲眩椋睿纾伲濉∥覑?ài)雪坡姐, 感謝大家支持。




本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久