首页
社区
课程
招聘
[旧帖] [求助]注册码算法的一点疑惑! 0.00雪花
发表于: 2010-3-15 17:55 1365

[旧帖] [求助]注册码算法的一点疑惑! 0.00雪花

2010-3-15 17:55
1365
004011FD  |.  033D 14354000 ADD EDI,DWORD PTR DS:[403514]            ;  注册名长度与0x7DC相加
00401203  |.  57            PUSH EDI                                 ; /<%d>
00401204  |.  68 1B354000   PUSH tsrh-cra.0040351B                   ; |tsrh-%d- (标志性的东东)
00401209  |.  68 20334000   PUSH tsrh-cra.00403320                   ; |s = tsrh-cra.00403320
0040120E  |.  E8 05010000   CALL <JMP.&USER32.wsprintfA>             ; 相加后的和转换成对应的十进制数
00401213  |.  83C4 0C       ADD ESP,0C
00401216  |.  68 20334000   PUSH tsrh-cra.00403320                   ; /String = ""
0040121B  |.  E8 34010000   CALL <JMP.&KERNEL32.lstrlenA>            ; \lstrlenA
00401220  |.  8B3D 14354000 MOV EDI,DWORD PTR DS:[403514]
00401226  |.  BE 01000000   MOV ESI,1
0040122B  |.  8BC8          MOV ECX,EAX
0040122D  \.  C3            RETE                                     ; 得到的结果作为SN1

wsprintf的具体用法 如上说是转换10进制值 怎么转的?
还有就是
00401216  |.  68 20334000   PUSH tsrh-cra.00403320                   ; /String = ""
0040121B  |.  E8 34010000   CALL <JMP.&KERNEL32.lstrlenA>            ; \lstrlenA
00403320 里装什么的?  为什么要计算长度

麻烦了

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
怎么没有人帮忙啊  问题虽然很低级....
2010-3-15 19:18
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
帮你顶一下吧,虽然楼主说很低级,但是我还是没看出来那里是什么。我感觉,似乎是一个函数里面的一个数值,但是不是很懂。
2010-3-15 19:55
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯、简单的
wsprintf()的原型是:
int wsprintf(          LPTSTR lpOut,
    LPCTSTR lpFmt,
     ...
);
功能是格式化一字串
类似于C语言的printf()
00403320 是tsrh-cra的一个指针,貌似它指向一个串

wsprintf(tsrh-cra.00403320, tsrh-cra.0040351B,EDI);

只这部分代码 没看出来什么、、、
2010-3-15 20:19
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那位老大给正解啊
这东西搜又搜不到...
004011C8    6A 00           PUSH 0
004011CA    68 D2070000     PUSH 7D2
004011CF    FF75 08         PUSH DWORD PTR SS:[EBP+8]
004011D2    E8 81010000     CALL <JMP.&user32.GetDlgItemInt>      ; 将输入的注册码转换成对应的16进制数
004011D7    A3 5F624000     MOV DWORD PTR DS:[40625F],EAX         ; 将得到的16进制数储存
004011DC    68 2C624000     PUSH up1.0040622C                     
004011E1    E8 C2000000     CALL up1.004012A8                     ; 算法CALL,跟进
004011E6    803D 63624000 0>CMP BYTE PTR DS:[406263],1            ; 注册码正确吗?
004011ED    74 43           JE SHORT up1.00401232
004011EF    85C0            TEST EAX,EAX
004011F1    75 17           JNZ SHORT up1.0040120A                ; 不正确就跳向失败
004011F3    68 06614000     PUSH up1.00406106                     ; congratulations! you are now level 2! :-)

CALL <JMP.&user32.GetDlgItemInt>      ; 将输入的注册码转换成对应的16进制数
这一句又看不懂 .....哎
2010-3-15 20:41
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
GetDlgItemInt()返回值是一个整型值,没什么16位
2010-3-15 21:04
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
终于醒悟过来
原来那只是作者随便写的一句话
计算机只认识二进制数
2010-3-15 21:25
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我来看我的KX是不是可以买邀请码
2010-3-15 21:28
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
都比俺KX币多 = =、
2010-3-15 21:51
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
wsprintf第一个参数是输出结果,就是把整型转成字符串形式,然后调用strlen计算字符串长度,就这么简单
2010-3-16 11:31
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,学习了~~
2010-3-16 11:32
0
游客
登录 | 注册 方可回帖
返回
//