|
|
|
|
|
KeyGenMe:Crack入门系列
crackme_06算法分析 本人是菜鸟,在这里献丑了。^_^ 假设name=1234 码表: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15//这一行是码值所在位置 -------------------------------------------------------------------//这一行没用的说 30 37 31 33 36 32 64 65 39 66 38 61 62 34 35 63//这一行是码值的asc值 0 7 1 3 6 2 d e 9 f 8 a b 4 5 c //这一行是码值代表的符号 1、name的长度必须大于4 2、获取C盘的序列号,本机是D8227F69,将D8227F69左移5位得到447ED20 3、将第2步得到的447ED20循环左移0D位,结果为FDA40089 4、获取D盘的序列号,本机为8CE3FA13 5、C盘的序列号加上D盘的序列号,结果等于6506797C 6、将第5步的结果6506797C左移5位得到A0CF2F80 7、将第6步的结果A0CF2F80循环左移0D位得到E5F01419 8、C盘序列号的值与D盘序列号的值做浮点运算(这里没看明白~)结果为79D13310 9、name的各个字符的asc值相乘,结果为632478 10、将第9步的结果632478循环左移1位,结果为C648F0 11、将第8步的运算结果79D13310与第10步的结果C648F0坐or运算,结果为79D77BF0 再将79D77BF0与0FFFFFFF相与,结果为9D77BF0 12、将第11步的结果9D77BF0除以10,余数为0,在码表中查找第0个码值为30即0 13、将9D77BF0除以4,所得商为275DEFC 14、将第13步的275DEFC除以10,余数为C,转换为10进制等于12,对应码值为62即b 15、将275DEFC除以4,商为9D77BF,按第14步的方式计算下一位的码值, 以此类推,直到除以4之后的商为0则计算完毕。 所以 name=1234时,serial=0bcca5e4e24ef1 |
|
|
KeyGenMe:Crack入门系列
keygenme_05算法分析 本人是菜鸟,在这里献丑了。^_^ 假设name=1234 码表如下: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25//这一行是码值所在的位置 -----------------------------------------------------------------------------//这一行只是分隔符 7E 21 40 23 24 25 5E 26 2A 28 29 5F 2B 7C 5C 3D 2D 2F 3F 2E 2C 3E 3C 3B 3A 60//这一行是码值 ~ ! @ # $ % ^ & * ( ) _ + | \ = - / ? . , > < ; : ` 1、name的长度必须大于4 2、name长度值除以2,所得商存于[ebp-20],这个值后面会用到,是一个循环的次数 【在这里就是:[ebp-20]=4/2=2】 3、获取name的第一个字符的asc值,用这个值乘以4,所得结果除以1A,得到余数E,E转换成10进制就是14, 查找码表,对应的码值是5C,即“\” 【在这里就是:31*4=C4,C4%1A=E,10进制值等于14】 4、获取name的第二个字符的asc值,假设这个值为asc2,则asc2=asc2+asc2*2,所得结果除以1A,余数为14 转换成10进制为20,查找码表,对应的字符为“,” 【在这里就是:32+32*2=96,96%1A=14,10进制值等于20】 5、[ebp-20]的值减1 6、获取name的第二个字符的asc码值,用这个值乘以4,得到的结果再除以1A,得到余数为12,转换成10进制 就是18,对应码值为“?” 【在这里就是:32%4=C8,C8%1A=12,10进制值等于18】 7、获取name的第三个字符的asc值,假设这个值为asc3,则asc3=asc3+asc3*2,计算结果除以1A,余数为17,转换 成10进制,就是23,对应的码值为“;” 【在这里就是:33+33*2=99,99%1A=17,10进制值等于23】 8、[ebp-20]的值减1 因为[ebp-20]的值已等于0,所以serial的计算已经完成,若[ebp-20]的值大于2则按照上面的计算规则,继续计算直到 [ebp-20]=0。 所以真实的serial值为\,?; |
|
|
KeyGenMe:Crack入门系列
KeyGenMe_04算法分析 本人是菜鸟,在这里献丑了。^_^ 假设name=123 serial的长度必须是十个字符,并且只能是数字 第1个字符asc码值与第6个字符asc码值的和必须是69 所以 1 2 3 4 5 6 7 8 9 10 -------------------- 8 5 第2个字符asc码值与第7个字符asc码值的和必须是67 所以 1 2 3 4 5 6 7 8 9 10 -------------------- 8 6 5 1 第3个字符asc码值与第8个字符asc码值的和必须是69 所以 1 2 3 4 5 6 7 8 9 10 -------------------- 8 6 8 5 1 1 第4个字符asc码值与第9个字符asc码值的和必须是70 所以 1 2 3 4 5 6 7 8 9 10 -------------------- 8 6 8 8 5 1 1 8 第4个字符asc码值与第10个字符asc码值的乘积必须是A8C 所以 1 2 3 4 5 6 7 8 9 10 -------------------- 8 6 8 8 6 5 1 1 8 2 所以当 name=123时,serial=8688651182 |
|
|
KeyGenMe:Crack入门系列
KeyGenMe_03算法分析 本人是菜鸟,在这里献丑了。^_^ 假设:name = 123 serial = 456 码表: A.B.C.D.E.F.G.H.I.J.K L.M.N.O.P.Q.R.S.T.U.V W.X.Y.Z.0.1.2.3.4.5.6 7.8.9 1、name的第一个字符的asc码值乘以1,乘积加1存入edi; name的第二个字符的asc码值乘以2,乘积加上edi的值结果存入edi 以此类推,name的第N个字符的asc码值乘以N再加edi的值结果存入edi 【在这里就是:edi = 31*1+1=32,edi = edi+32*2=96,edi=edi+33*3=12F】 2、将第一步的最终计算结果12F乘以147D5,结果等于184051B 3、将第2步的计算结果184051B除以24,得到余数1B,将1B加1,等于1C,将1C乘以2, 得到38,再减去2,得到36,换成10进制就是54,在码表找到第54个字符(.也算是一个字符) ,对应的码值是1,所以真实的serial的第一个字符是1. 【在这里就是:184051B%24=1B,1B+1=1C,1C*2=38,38-2=36】 4、通过fild,fstp,fld指令,把第2步获得的结果184051B转换为浮点实数25429275,将25429275 除以3,把所得的商转换成16进制存入esi中,用esi的值除以24,所得余数为9,将9加上1等于 A,A乘以2,再减去1,得到12转成十进制就是18,在码表中对应的值为J 所以真实的serial的第二个字符是J. 5、通过fild,fstp,fld指令,把第4步中esi的值转换为浮点实数,再除以3,把商转换成10进制存入 esi,再用esi的值除以24,所得的余数为F,(F+1)*2-2=38换成10进制就是30,对应码值是P 6、循环执行第5步,每次以上一次的esi的值做第5步的运算,直到esi的值等于0。 下面就name = 123演算一次 1、31*1+1+32*2+33*3=32+64+99=12F 2、12F*147D5=184051B 3、184051B%24=1B,1B+1=1C,1C*2-2=36,把36换成十进制等于54,对应码值为1 4、把184051B转换为浮点实数25429275,25429275/3=8476425,换成16进制等于815709,存入esi,815709%24=9,9+1=10,10*2-2=12 12换成10进制就是18,对应的码值是J 5、把815709换成浮点实数,所得结果除以3,商等于2825475,换成16进制就是2B1D03,存入esi, 2B1D03%24=F,(F+1)*2-2=1E,换成10进制就是30,对应的码值是P 6、把2B1D03换成浮点实数,所得结果除以3,商等于941825换成16进制就是E5F01,存入esi, E5F01%24=1D,(1D+1)*2-2=3A,换成10进制就是58,对应的码值是3 按照此计算方式一直计算直到esi的值等于0。 所以当name = 123时,真实serial=1JP3W589Y69AMQFCB 不当之处多多包含。 |
|
|
找来一个简单的crackme,给初学者练习用
是啊机器名是没用上的 ^_^ |
|
|
找来一个简单的crackme,给初学者练习用
本人是菜鸟,在这里献丑了 ^_^ key的值分为5段,开头部分固定为HNT- 假设 user=123 key=456 \---------------------------------key第二段值计算--------------------------------/ 1、user的第一个字符的asc值乘以user最后一个字节的asc值 【在这里就是31*33=9C3】 2、user的长度除以2得到商,这个商用A表示,用第一步的计算结果乘以user的第(A+1)个字 符的asc值 【在这里就是,9C3*32 = 1E816】 3、将计算结果除以0A得到余数B,将B加上30,即B = B+30,将B存入内存中,所得商 继续除以0A,所得商加30保存内存中,依此类推,总共要做四次循环除法 【在这里就是,1E816%0A+30 = 30,30CF%0A+30 = 35,4E1%0A+30 = 39, 7C%0A+30 = 34,所以最终结果是34393530即4950】 \---------------------------以上就是key第二段值计算过程------------------------/ 经过上述的计算,真正的key=HNT-4950 \---------------------------------key第三段值计算--------------------------------/ 4、获取本机的计算机名称,并累加名称每个字符的asc值 5、假设user长度为N,则把N赋给eax,然后user最后一个字符的asc值乘以N,用eax加上所得 结果,user倒数第二个字符乘以(N-1),用eax加上所得结果,依此类推,直到把user所 有字符运算一次。 【在这里就是,eax=3,33*3=99,eax=eax+99=9C,32*2=64,eax=eax+64=100,31*1=31,eax=eax+ 31=131】 6、通过CPUID命令获取cpu信息,如果是intel的cpu则ecx=6C65746E,edx=49656E69, ebx = 756E6547,其中ecx,edx先入栈,后面会用到,这里用第5步的计算结果和ebx做与 运算,结果保存到eax 【在这里就是,eax=131,and eax,ebx,最后eax等于101】 7、将第6步获得的eax的值,按照第3步的方式存入内存,即30323537 \---------------------------以上就是key第三段值计算过程------------------------/ 经过上述的计算,真正的key=HNT-4950-0257 \---------------------------------key第四段值计算--------------------------------/ 8、将user每个字符的asc值依次累加,结果存入eax 【在这里就是:31+32+33=96】 9、将第8步的计算结果与第6步中cpu的另外两个参数做或运算 【在这里就是:eax=96,or eax,49656E69;or eax,6C65746E;最后eax=6D657EFF】 10、分别取user的前两个字符的asc值做乘法,所得结果再与第9步的eax相乘 【在这里就是:31*32=992,992*6D657EFF=416F559646E,其中只取F559646E】 11、将第10步获得的结果即F559646E按照第3步的方式存入内存,即36333334 \---------------------------以上就是key第四段值计算过程------------------------/ 经过上述的计算,真正的key=HNT-4950-0257-6334 \---------------------------------key第五段值计算--------------------------------/ 12、将user每个字符的asc值依次累加,结果存入eax,然后eax除以1A,所得余数加41,结果存 入eax 【在这里就是:31+32+33=96,eax=96%1A+41=55】 13、重复第5步,运算结果存入eax,即eax=131 14、将第13步的eax值除以1A,所得余数加41,结果存入edx 【在这里就是:edx=131%1A+41=54】 15、eax的第一个字节,edx第一个字节合起来即为key第五段值 【在这里就是:5554,换成字符就是UT】 \---------------------------以上就是key第五段值计算过程------------------------/ 经过上述的计算,真正的key=HNT-4950-0257-6334-UT 所以 user=123 key=HNT-4950-0257-6334-UT 错漏之处请多多包含~ 感谢楼主提供此Crackme |
|
|
[求助]以下汇编代码何解?(很短,就几行)
why? 就这一段代码出现了很多次,不知道有什么作用? |
|
|
[分享]热血江湖2.0 数据发包函数分析
楼主如何找到这个发送数据的地方? |
|
|
|
|
|
[求助]非常奇怪的函数
个人认为做这样的分析最好能够结合寄存器和堆栈值的变化来分析~ 例如eax初始值是 $1004,那进入0054B410之后会发生什么变化呢? 或许不是最好的办法,但是不妨试一下~ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值