能力值:
( LV6,RANK:90 )
|
-
-
2 楼
jnz xxxxxxxx
改成
jle xxxxxxxx
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
jle不行
下面还有一个jnz是向上的,是不是两个都要改呢??
都看标志位z的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
不知道0算有符号无符号
可以用js代替吗??
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
代码多贴几行出来, 一次性把你的要求说出来。。。别人帮你看吧,我闷
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢,麻烦帮我看看
004F18BF 85C0 test eax,eax
004F18C1 0F8C 82000>jl <Unpack_2.loc_4F1949>
004F18C7 40 inc eax
004F18C8 8945 D8 mov dword ptr ss:[ebp-28],eax
004F18CB 33DB xor ebx,ebx
004F18CD > 8D45 D0 lea eax,dword ptr ss:[ebp-30] ; 循环开始,逐日
004F18D0 50 push eax
004F18D1 8D4D CC lea ecx,dword ptr ss:[ebp-34]
004F18D4 A1 946A4F0>mov eax,dword ptr ds:[4F6A94]
004F18D9 8B00 mov eax,dword ptr ds:[eax]
004F18DB 8BD3 mov edx,ebx
004F18DD 8B38 mov edi,dword ptr ds:[eax]
004F18DF FF57 0C call dword ptr ds:[edi+C]
004F18E2 8B45 CC mov eax,dword ptr ss:[ebp-34]
004F18E5 B9 0800000>mov ecx,8
004F18EA BA 0100000>mov edx,1
004F18EF E8 7838F1F>call <Unpack_2.System::__linkproc__ L>
004F18F4 8B45 D0 mov eax,dword ptr ss:[ebp-30]
004F18F7 E8 1C7FF1F>call <Unpack_2.Sysutils::StrToInt(Sys>; 把起始日期字符串转成十六进制数
004F18FC 8BF8 mov edi,eax
004F18FE 8B86 20030>mov eax,dword ptr ds:[esi+320]
004F1904 E8 BF0FFFF>call <Unpack_2.sub_4E28C8>
004F1909 3BF8 cmp edi,eax
004F190B 75 36 jnz short <Unpack_2.loc_4F1943> ;这里
004F190D 8D45 C8 lea eax,dword ptr ss:[ebp-38]
004F1910 50 push eax
004F1911 8D4D C4 lea ecx,dword ptr ss:[ebp-3C]
004F1914 A1 946A4F0>mov eax,dword ptr ds:[4F6A94]
004F1919 8B00 mov eax,dword ptr ds:[eax]
004F191B 8BD3 mov edx,ebx
004F191D 8B38 mov edi,dword ptr ds:[eax]
004F191F FF57 0C call dword ptr ds:[edi+C]
004F1922 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
004F1925 B9 0600000>mov ecx,6
004F192A BA 0900000>mov edx,9
004F192F E8 3838F1F>call <Unpack_2.System::__linkproc__ L>
004F1934 8B55 C8 mov edx,dword ptr ss:[ebp-38]
004F1937 A1 746E4F0>mov eax,dword ptr ds:[4F6E74]
004F193C 8B00 mov eax,dword ptr ds:[eax]
004F193E 8B08 mov ecx,dword ptr ds:[eax]
004F1940 FF51 38 call dword ptr ds:[ecx+38]
004F1943 > 43 inc ebx
004F1944 FF4D D8 dec dword ptr ss:[ebp-28]
004F1947 ^ 75 84 jnz short <Unpack_2.loc_4F18CD> ;这里
|
能力值:
(RANK:260 )
|
-
-
7 楼
你知道C中的continue语句是什么作用吗?
你注释中标记的分支,前一处为循环体内的continue;
后一次为循环体本身。
不明白整块代码的“意思”,只知道单条指令的作用,是无法读懂算法的。
要从编程的基础学起啊。
这是一个基本的循环遍历一个集合(数组,链表,向量),寻找其中满足一定条件的元素,而真正的“工作”是在找到了之后,也就是continue跳过不满足条件的元素,当遇到满足条件的元素时,continue语句不执行,而执行它之后的代码,这里才是关键的算法。
具体这一段程序的内容,从所贴出来的代码无法得到更多的信息,但我可以写一个流程类似的“演示”伪C代码,来说明这个循环的结构,如下:
for( each element e in container C )
{
if ( some_condition_is_meet )
continue;
// here we do something useful
e.do_something();
}
希望对你有所帮助。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这里现在是非零跳转
因为cmp比较的edi,eax
edi一直小于eax
我想要的结果是edi等于eax也跳一次,就是0也跳一次,
edi大于就不跳
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
感谢老兄的帮助,之前那个算法问题我还是解决不了
我跟了这么多天只了解了一部分情况,但对于汇编和编程我都不是很熟悉,无法逆出它的算法,特别是它还使用RSA和大数运算(网上查的),所以找不出什么P,Q,E这些必要的东西
程序是用硬盘列号前面加8位字串作机器码,注册无提示,并且把机器码和注册码写到一个文件中
注册码->base64to256->RSA->FGInt与机器码作比较
之后就是那两个比较,第一次比较硬盘序列号的前3位,第二次对整个机器码作比较.正如你所说,第一次不正确,就不用第二次了.之后还会连网到网站下载一个文件,这个文件打开看,也是个机器码,但硬盘序列号部分不一样,不知道是用于筛选前8位还是作别的用
所以我既然推不出来,就干脆选择在比较之后做爆破修改下面的跳转
但效果和之前用字符串参考的效果一样,尽管随便输入注册码显示已注册成功,仍有个功能无法使用
强制去掉弹出对话框,就什么都不显示,郁闷
所以这才想从计算上入手,但发现,它在用以上程序循环筛选,比较日期会出现我那问题的情况,就是cmp比较,相减,为0就不再跳转了.....只能计算到前一天的日期,所以发贴求助..
这些天真郁闷
但也发现,知识在一点一点儿的学习,呵呵,但眼前的确无法找到真正的注册码了,比较急
|