能力值:
( LV5,RANK:70 )
|
-
-
2 楼
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@%"最长的位置是0x3F,二进制最长6BIT,所以可以把4个字节压缩成3个字节,当时我在把3个字节还原成4个字节的时候,花了点时间。话说第一轮的结果出来没有?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
是的 3个字节还原4个字节我也是花时间最多的哈,结果是14号公布吧 不过我看到题的时候是9号了,9号24:00提交 ,咱不是学生这能围观了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
只能膜拜一下了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
围观一下,分享实录
|
能力值:
(RANK:350 )
|
-
-
6 楼
编辑了一下你的帖,把题目上传上来了。
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
第一次传附件 弄的乱七八糟 谢谢坛主大大帮忙
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
小弟刚刚初学逆向这些,根据大哥的提示也成功断到大哥那些地址,跟大哥上面一致,我想用直接爆破跳转去修改这个程序,联系下,但是出现了一点疑问..求指点下,
我直接跳转到 xor eax,eax 然后把直接强行把eax赋值1,改成 mov eax,1
然后往下面跟踪 也发现 eax的值修改为1
但是程序运行后,提示的确实乱码,我不太理解,求解答
|
能力值:
( LV12,RANK:380 )
|
-
-
9 楼
首先你破坏了汇编指令那就肯定错了。
------------------------------------------
在我选中的指令处下端点,然后寄存器窗口-ESP-右键“数据窗口跟随”-再看数据窗口:
你会发现账户名,然后继续单步下去的话会看见字符串注册失败成功 往下在拉一些就可以看见你输入的序列号。
在楼主说的xor,eax.eax处下个断点,F9-F8-寄存器窗口修改eax为1
往下走一步
结果:
再试试?
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
置1是可以的提示注册成功的 可是我就是想这种内存修改代码试试 楼主已经公布了算法的了 所以自己想试试内存改代码的
|
能力值:
( LV12,RANK:380 )
|
-
-
11 楼
那就JMP或CALL更改。
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
003821E4 83C4 04 add esp,4
003821E7 33C0 xor eax,eax 这个汇编指令只占内存2个字节
003821E9 8B5484 7D mov edx,dword ptr ss:[esp+eax*4+7D]
003821ED . 8B4C24 54 mov ecx,dword ptr ss:[esp+54]
你修改成 mov eax,1 是占5个字节的
破坏了mov edx,dword ptr ss:[esp+eax*4+7D]这条指令 这是通过指针取失败和成功的字符的 你破坏了 就造成 没有取堆栈的字符 直接压栈EDX 显示乱码了
你可以这样爆破,在判断用户名长度跳转这里直接JMP到 003821E4。
003821E4 83C4 04 add esp,4 这里是3个字节+上下面xor eax,eax 正好是5个字节
003821E7 33C0 xor eax,eax 这个汇编指令只占内存2个字节
00381F96 /0F87 4B020000 ja Tencent2.003821E7 ; 原来的
00381F9C . |33C0 xor eax,eax
00381F93 . 83F8 0E cmp eax,0E
00381F96 - E9 7962CBFF jmp 00038214 修改后JMP无条件跳转,不管用户名长度如何都跳到成功
003821DF . E8 C30A0000 call Tencent2.00382CA7
003821E4 B8 01000000 mov eax,1 //修改后没有破坏下面要执行的指令
003821E9 8B5484 7D mov edx,dword ptr ss:[esp+eax*4+7D]
003821ED . 8B4C24 54 mov ecx,dword ptr ss:[esp+54]
003821F1 . 8D4424 74 lea eax,dword ptr ss:[esp+74]
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
为什么我在
IsDebuggerPresent
下断点不走呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
楼主试试上面内联汇编部分换成下面这样能不能生成你要的,我只是个新手,如果说错了,不要骂我
a = *(int*)&strb[i] / 10;
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
[QUOTE=gs笨笨;1419862]楼主试试上面内联汇编部分换成下面这样能不能生成你要的,我只是个新手,如果说错了,不要骂我
a = *(int*)&strb[i] / 10;[/QUOTE]
楼上正解 测试通过
|
能力值:
( LV9,RANK:410 )
|
-
-
16 楼
分析的不错,支持一下
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
[QUOTE=wliupengw;1419846]003821E4 83C4 04 add esp,4
003821E7 33C0 xor eax,eax 这个汇编指令只占内存2个字节
003821E9 8B5484 7D mov edx,dword ptr ss:[esp...[/QUOTE]
明白了, 谢谢大哥~ 测试通过
|
能力值:
( LV5,RANK:70 )
|
-
-
18 楼
不对呀,楼主,我看你3个恢复四个时候,好像不是它那个加密算法的逆运算呀, miadie[0]=neu_lastword21[i*3+0];
miadie[1]=neu_lastword21[i*3+1];
miadie[2]=neu_lastword21[i*3+2];
password[2+i*4]=0x20;
password[3+i*4]=miadie[2]-password[2+i*4]<<6;//((miadie[1]^((password[1+i*4]<<4)))&0xf)<<2;
password[1+i*4]=(miadie[1]^((password[2+i*4]>>2)&0xf))>>4;
password[0+i*4]=(miadie[0]-((password[1+i*4]>>4)&3))%4;
我这样算不知道为什么得不到正解呀
|
能力值:
( LV5,RANK:70 )
|
-
-
19 楼
楼主,我就是密码还原部分不懂,而且也没有看懂你的思路哦,好像你没有严格按照加密的逆运算来搞,而且好像很多你都是直接当0的,能讲解一下吗
|
能力值:
( LV5,RANK:75 )
|
-
-
20 楼
你说有段汇编怎么用C++写,那个是指令里有个算数右移sar,牵扯的符号位的问题,那个变量a要定义为有符号数int
|
能力值:
( LV4,RANK:50 )
|
-
-
21 楼
嗯,搞明白了。 就是一个有符号除法 我没有转换有符号类型才出错
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
我也是断在GetDlgItem这里,一直F8下去,堆栈都没有出现过注册成功或者失败的字样诶,是不是要跟进call里面的?
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
不错不错
|
能力值:
( LV5,RANK:70 )
|
-
-
24 楼
是不是说要看出它的左移右移要看出是哪一种乘除运算,再做反向运算?不一定对照着汇编做反向运算????
|
能力值:
( LV5,RANK:70 )
|
-
-
25 楼
是不是说做算法反向的时候,需要看懂那些左移右移代表的乘除含义,再做运算级的反向?不要做汇编级的反向?
|
|
|