首页
社区
课程
招聘
[旧帖] [分享]菜鸟第一次破TraceMe的算法,求个邀请码哈 0.00雪花
发表于: 2013-2-8 22:40 3016

[旧帖] [分享]菜鸟第一次破TraceMe的算法,求个邀请码哈 0.00雪花

2013-2-8 22:40
3016

刚学win32汇编感觉很困难,无聊看了两节小甲鱼od的视频,看了第二节爆破《加密与解密》
的一个traceme,便尝试逆向算法,竟然成功了。顺便写了个算序列号的小程序,水平有限用
dos16位汇编写的。求各位大神指点。顺便求个邀请码哈!

这个程序的界面如下,需要输入正确的用户名和序列号。随便试一试,肯定不行哈。

好吧,加载程序到ollydbg,打开调用的api列表看看程序调用了哪写api 。
从获取字符串的api下手 ,很明显能找到获取字符串的api  GetDlgItemTextA
此时运行到断点时处于系统函数中,alt+f9返回应用程序便到了此处
http://b254.photo.store.qq.com/psb?/V138inUn0NEGSW/lUiU74mAcQD5Ca34uuIji3A0iFhPqQM1KQVc9WryP7I!/b/dBqBaJcrCwAA&bo=nQEgAQAAAAABAJo!
而且调用两次api后进跟着一个函数,call 00401340,然后后面接着test ax,ax和je跳转
貌似序列号算法的核心在此。
http://b253.photo.store.qq.com/psb?/V138inUn0NEGSW/q51duVe7IwX3DZkKFwgcFCQP9UfjHsI*0BMkFglutwQ!/b/dOsK3JZACwAA&bo=mgKuAQAAAAABABA!
一步一步运行到call 00401340,会发现这函数的3个参数,
很明显,用户名,用户名字节数,输入的序列号
http://b253.photo.store.qq.com/psb?/V138inUn0NEGSW/oFbePDvgJ3NOwn2izJ1MmUGquBPI4Rfc*LbLFxdOgdc!/b/dDfl1ZbPCwAA&bo=4wA0AAAAAAABAPA!
好吧明显是算法函数,爆破点也是在这个call之后。(我之前一个CrackMe也是**爆破的。。。太对不起写CrackMe的大神了)
不过我要尝试去逆向算法。
进入到函数内部
00401359  |> /83F8 07       /CMP EAX,7
0040135C  |. |7E 02         |JLE SHORT 00401360
0040135E  |. |33C0          |XOR EAX,EAX
00401360  |> |33D2          |XOR EDX,EDX
00401362  |. |33DB          |XOR EBX,EBX
00401364  |. |8A1429        |MOV DL,BYTE PTR DS:[ECX+EBP]
00401367  |. |8A98 30504000 |MOV BL,BYTE PTR DS:[EAX+405030]
0040136D  |. |0FAFD3        |IMUL EDX,EBX
00401370  |. |03F2          |ADD ESI,EDX
00401372  |. |41            |INC ECX
00401373  |. |40            |INC EAX
00401374  |. |3BCF          |CMP ECX,EDI
00401376  |.^\7C E1         \JL SHORT 00401359
00401378  |.  5B            POP EBX
00401379  |>  56            PUSH ESI                                 ; /<%ld>
0040137A  |.  68 78504000   PUSH 00405078                            ; |Format = "%ld"
0040137F  |.  55            PUSH EBP                                 ; |s
00401380  |.  FF15 9C404000 CALL DWORD PTR DS:[<&USER32.wsprintfA>]  ; \wsprintfA
00401386  |.  8B4424 1C     MOV EAX,DWORD PTR SS:[ESP+1C]
0040138A  |.  83C4 0C       ADD ESP,0C
0040138D  |.  55            PUSH EBP                                 ; /String2
0040138E  |.  50            PUSH EAX                                 ; |String1
0040138F  |.  FF15 04404000 CALL DWORD PTR DS:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA
这里便是序列号算法
具体算法是把用户名从第4(3)个字节开始每个字节与一段8字节的固定数据相乘(每次只乘一个字节的数据,8字节循环)
然后累计相加,便得到序列号。
由于本人win32刚入门,智商捉鸡,所以用dos16位汇编写了个简单粗暴的程序算序列号
http://b252.photo.store.qq.com/psb?/V138inUn0NEGSW/3ZcgVR8swZnucnikWtc*DkJ9hFJphDfptjCaHnIPiVg!/b/dHTyPpaKDgAA&bo=oQFSAQAAAAABANQ!
代码如下


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (3)
雪    币: 45
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图都挂了。。。。。。这是原文,也是我写的http://user.qzone.qq.com/1030456330#!app=2&via=QZ.HashRefresh&pos=1360333241
下面是算序列号的程序代码

;by 夜兽
assume cs:codesg

datasg         segment
        db 0ch,0ah,13h,09h,0ch,0bh,0ah,08h
datasg         ends

strsg        segment
        db        32        dup        (0)
strsg        ends

_s        segment
        db        '               $'
_s        ends

       
codesg         segment
start:        mov ax,datasg
                mov ds,ax
                mov ax,strsg
                mov es,ax
                xor di,di
                xor cx,cx
_input:
                mov ax,0
                int 16h
                cmp ah,1
                je        _end
                cmp ah,01ch
                je _inputfinish
                        mov es:[di],al
                        inc di
                        inc cx
                        call showstr                                
                jmp short _input
_inputfinish:
                xor dx,dx
               
                mov di,3
                xor si,si
               
                sub cx,3
        sss:
                mov al,es:[di]
                mov bl,[si]
                mul bl
                add dx,ax
               
                inc si
                cmp si,8
                jne _sitoz
                        xor si,si
                _sitoz:
               
                inc di
        loop sss       
       
                call dxascii
                mov ah,9
                mov dx,0
                int 21h
               
                call _enter
               
                call _szero

                jmp short start
               
        _end:       
                mov ax,4c00h
                int 21h
;=============================
;换行

_enter:
                push ax
                push bx
                push cx
                push dx
               
                mov ah,03h
                int 10h
                inc dh
                mov dl,0
                mov ah,02h
                int 10h
               
                pop dx
                pop cx
                pop bx
                pop ax
ret
;=============================               
               
;=============================
;变量初始化
_szero:
        push ax
        push bx
        push cx

        mov ax,_s
        mov ds,ax
        xor bx,bx
        mov cx,15
        _sloop:
                mov byte ptr [bx],' '
                inc bx
        loop _sloop
        mov byte ptr [bx],'$'
       
        pop cx
        pop bx
        pop ax
ret
;=============================
               
;=============================
;dx
;--> _s '','$'
dxascii:
                push ax
                push bx
                push cx
                push si
                push di
       
                mov si,14
                mov ax,_s
                mov ds,ax
               
               
                mov ax,dx
        dxdiv:
                xor dx,dx
                mov bx,10
                div bx
                add dl,30h
                mov [si],dl
                dec si
                cmp ax,0
                jne        dxdiv
               
                pop di
                pop si
                pop cx
                pop bx
                pop ax
                       
ret
;=============================
               
               
;=============================
;参数:al

showstr:
                push ax
                push bx
                push cx
                push dx
               
                mov ah,0ah
                mov bh,0
                mov cx,1
                int 10h
               
                mov ah,03h
                int 10h
                inc dl
                mov ah,02h
                int 10h
               
                pop dx
                pop cx
                pop bx
                pop ax
ret
;=============================               
codesg         ends
end         start
2013-2-8 22:43
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
文章中的图片参考这帖http://bbs.pediy.com/showpost.php?postid=292659,建议转到论坛本地。

己手工给你转正了。
2013-2-8 22:48
0
雪    币: 45
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢看雪大神!
2013-2-8 22:52
0
游客
登录 | 注册 方可回帖
返回
//