能力值:
( LV2,RANK:10 )
|
-
-
2 楼
aicode
30415321
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
这么厉害。。。竟然这么轻易被解了?
|
能力值:
(RANK:570 )
|
-
-
4 楼
0049721A jnz loc_497356
==> nop
注册成功
要加密字符,就把全部字符都加密。。。
突然出现加密的字符,太不自然了。。。
在CRACKME里出现提权和TOOLHELP API的调用,也太明显了。。。
我只会爆破
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
|
能力值:
( LV9,RANK:290 )
|
-
-
6 楼
最初由 笨笨雄 发布 0049721A jnz loc_497356
==> nop
注册成功 ........
怎么让他不出现提权关键字和toolhelp32api的名称.
指点下.
还想问问怎么让一些加密字符串不显示,谢谢兄弟了,!学习!
|
能力值:
( LV9,RANK:250 )
|
-
-
7 楼
怎会出现如此明显的明码比较,不解
lgjxj
45007005
还有二楼的兄弟好象注册码错误把
|
能力值:
( LV9,RANK:250 )
|
-
-
8 楼
前面的我没精力去看了
004086D9 |> /31D2 /XOR EDX,EDX
004086DB |. |F7F1 |DIV ECX
004086DD |. |4E |DEC ESI
004086DE |. |80C2 30 |ADD DL,30
004086E1 |. |80FA 3A |CMP DL,3A
004086E4 |. |72 03 |JB SHORT crackme.004086E9
004086E6 |. |80C2 07 |ADD DL,7
004086E9 |> |8816 |MOV BYTE PTR DS:[ESI],DL
004086EB |. |09C0 |OR EAX,EAX
004086ED |.^\75 EA \JNZ SHORT crackme.004086D9
|
能力值:
(RANK:570 )
|
-
-
9 楼
如果我做字符参考的工具,那么我会对比每一个字节,看看它是否在可见字符范围之内。
所以加密字符的时候,应该尽量考虑使用不可见的字符编码。
例如“D”的ASCII码是0x44
可以分解成3个字节保存,0x1F,0x1F,0x02
3个字节加起来就是0x44了
这是一个简单的实现,只要把0x44减0x1F,直到得数少于1f为止。
同样要还原字符也很简单,各字节相加,遇到少于1f的字节为止,然后下一个字符。
也可以用查表(加密表里的字符)的方法得出想要的字符,反正跟注册信息相关的字符1F长度的表应该够用了。
另外,当我们不知道字符的编码格式时,我们会以00或者00,00作为一个字符的终结。IDA中的字符参考功能有一个过滤器,当字符少于某个长度时,就不显示该字符。默认字符长度是5。
也就是说只要我们通过某种加密方法,将第5个字符变成0,就可以骗过IDA了。
以简单的XOR为例,只要将该字符的第5个BYTE作为KEY加密整个字符就可以了(注意XOR自己总是等于0)
|
能力值:
(RANK:570 )
|
-
-
10 楼
使用GETPROCADDREE获取API,可以避免通过IAT了解程序用了什么ANTI DEBUG的方法。但是我们仍然需要字符。
字符参考,或者通过GETPROCADDREE的交叉参考,修改EIP运行到GETPROCADDREE就可以知道你用了什么API了。
所以最好的方法是自己直接读取导出表,通过比较每一个字符的校验值,定位出相关API。
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
to KAN
二楼是对的,因为采用了时间,你把系统日期跟时间改为他的发铁时间算出来的结果会跟二楼一样
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
谢谢版主,又学到了东西,喝喝
|
能力值:
( LV9,RANK:250 )
|
-
-
13 楼
哦,对,我就粗略的看到了取系统时间的地方,当时没理会,只想出结果,就跟了过去,看到了最终结果生成的地方
|
|
|