吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2001|回复: 8

某程序RSA算法问题高手指点

 关闭 [复制链接]
菜鸟中的菜鸟 发表于 2016-8-6 14:56 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


300HB
本帖最后由 菜鸟中的菜鸟 于 2016-8-6 15:54 编辑

学习RSA相关的东西,找高手的逆向文章,结果找了个06年发的逆向图文,也是很老的软件了。逆向图文中有几处不明白,所以想请高手帮忙看下。逆向图文中:

00402FBF  |.  E8 CC190000   CALL Speed_Vi.00404990               ;  RSA运算
00402FC4  |.  B9 08000000   MOV ECX,8
00402FC9  |.  33C0          XOR EAX,EAX
00402FCB  |.  8D7C24 18     LEA EDI,DWORD PTR SS:[ESP+18]
00402FCF  |.  6A 08         PUSH 8
00402FD1  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]
00402FD3  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]
00402FD7  |.  C68424 AC0000>MOV BYTE PTR SS:[ESP+AC],6
00402FDF  |.  51            PUSH ECX
00402FE0  |.  8D4C24 58     LEA ECX,DWORD PTR SS:[ESP+58]
00402FE4  |.  E8 47710000   CALL Speed_Vi.0040A130               ;  输出RSA运算结果 [A44E60--70]
00402FE9  |.  B9 08000000   MOV ECX,8
00402FEE  |.  33C0          XOR EAX,EAX
00402FF0  |.  8DBC24 800000>LEA EDI,DWORD PTR SS:[ESP+80]
00402FF7  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]           ;  堆栈空出空间
00402FF9  |.  5F            POP EDI
00402FFA  |>  8A5404 17     /MOV DL,BYTE PTR SS:[ESP+EAX+17]
00402FFE  |.  8A4C04 16     |MOV CL,BYTE PTR SS:[ESP+EAX+16]
00403002  |.  885404 7C     |MOV BYTE PTR SS:[ESP+EAX+7C],DL
00403006  |.  8B5404 14     |MOV EDX,DWORD PTR SS:[ESP+EAX+14]
0040300A  |.  884C04 7D     |MOV BYTE PTR SS:[ESP+EAX+7D],CL
0040300E  |.  8A4C04 14     |MOV CL,BYTE PTR SS:[ESP+EAX+14]
00403012  |.  C1EA 08       |SHR EDX,8
00403015  |.  885404 7E     |MOV BYTE PTR SS:[ESP+EAX+7E],DL
00403019  |.  884C04 7F     |MOV BYTE PTR SS:[ESP+EAX+7F],CL
0040301D  |.  83C0 04       |ADD EAX,4
00403020  |.  83F8 20       |CMP EAX,20
00403023  |.^ 7C D5         \JL SHORT Speed_Vi.00402FFA           ; 循环重排序RSA运算结果
00403025  |.  8D5424 7C     LEA EDX,DWORD PTR SS:[ESP+7C]
00403029  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
0040302D  |.  52            PUSH EDX
0040302E  |.  E8 75FE0000   CALL <JMP.&MFC42.#537>
00403033  |.  8B4424 10     MOV EAX,DWORD PTR SS:[ESP+10]
00403037  |.  8B4C24 0C     MOV ECX,DWORD PTR SS:[ESP+C]
0040303B  |.  50            PUSH EAX
0040303C  |.  51            PUSH ECX
0040303D  |.  FFD6          CALL NEAR ESI                         ;  用户名16进制数与计算结果比较

二、算法小结

1.注册码分为8组,s1、s2、s3、s4、s5、s6、s7、s8
  验证前预处理:s7=(s1+s6) xor s7    s8=(s2+s3+s4+s5) xor s8

2.RSA256运算   
  n=5D79D4F2EAF92557CEE8EC453254F2CA9B43197BD424BB6C44A30D1366C11BB9
  e=10001
      
3. 重排序运算结果
  B1BE436A       6A43BEB1
  F29961A1  ------>   A16199F2            
  6A85B49E       9EB4856A
         
4. 重排序的运算结果和用户名16进制数比较,相等则注册成功,不等则失败。     
         
三、算法验证

用RSATool工具,根据n、e,求出p、q、d
 p=A4A4B5845A655DA9EF76DED6C373A31B
  q=9157E97B62A6CFDD8AAA6FC9557355BB
  d=2FD52823261A580196DF9A07CEB9A983654FAB5DD473BC2857780CFCF3D9AC01

用户名m=wzwgp -> wzwg-p -> p000wzwg (0x70000000777A7767)
设:X=70000000777A7767   <------ m
    Y=2FD52823261A580196DF9A07CEB9A983654FAB5DD473BC2857780CFCF3D9AC01 <------ d
    Z=5D79D4F2EAF92557CEE8EC453254F2CA9B43197BD424BB6C44A30D1366C11BB9 <------ n
用Bigclc“X^Y%Z”计算出C
    c=1D033EF29AE89BBB1DD3C955D95D4215FEDDD89B3B41131F94F743B93A40440E   

变为:1D033EF2-9AE89BBB-1DD3C955-D95D4215-FEDDD89B-3B41131F-94F743B9-3A40440E
   3A40440E-94F743B9-3B41131F-FEDDD89B-D95D4215-1DD3C955-9AE89BBB-1D033EF2
计算:s7=58140D63 xor 9AE89BBB=C2FC96D8
   s8=A8737188 xor 1D033EF2=B5704F7A
   3A40440E-94F743B9-3B41131F-FEDDD89B-D95D4215-1DD3C955-C2FC96D8-B5704F7A


用户名:wzwgp
注册码:3A40440E-94F743B9-3B41131F-FEDDD89B-D95D4215-1DD3C955-C2FC96D8-B5704F7A

注册信息保存在Settings.ini文件里。


上面都是图文中的分析。。而我不明白的地方是:
<1> 文中 00402FBF  |.  E8 CC190000   CALL Speed_Vi.00404990               ;  RSA运算
CALL这么多,怎么能判断出来这个CALL是作用是RSA运算的?


<2> 00402FE4  |.  E8 47710000   CALL Speed_Vi.0040A130               ;  输出RSA运算结果 [A44E60--70]
我跟踪了下,也没有发现RSA的运算结果和 [A44E60--70]有什么关系???那么RSA加密注册码后,结果放到了那里呢?
我不知道我跟踪的对不对,以用户名test,注册码:11111111-22222222-33333333-44444444-55555555-66666666-77777777-88888888来注册,当然这个是假码了。
加密后的结果如下(不知道判断的对不对),
结果存的位置.png


即 ss:[esp+0x18]处放的应该是加密后的结果吧,也就是数据区的:0012CFF4处的32字节的数据:
04 40 91 13 54 5E 50 82 09 57 2D D6 F6 5A 91 66 2D E6 87 1D EA 07 96 CF FE 8D F3 08 A1 49 02 2C

稍后,程序又开始进行倒序处理,倒序后再比较用户名来判断是否成功注册。我跟踪的倒序是这样的:

倒序后:(每四位倒序)
13 91 40 04 82 50 5E 54 D6 2D 57 09 66 91 5A F6 1D 87 E6 2D CF 96 07 EA 08 F3 8D FE 2C 02 49 A1
倒序问题.png

但是呢?文章中
变为:1D033EF2-9AE89BBB-1DD3C955-D95D4215-FEDDD89B-3B41131F-94F743B9-3A40440E
   3A40440E-94F743B9-3B41131F-FEDDD89B-D95D4215-1DD3C955-9AE89BBB-1D033EF2
这里可以看出,它的倒序是整个字符串都倒序过来,而我判断是每四位倒序过来。。。。貌似我的判断是错误的,
因为我在生成注册码时,我用的倒序方法生成的不对,而用作者的这种倒序生成的就对。


貌似说的有些乱,意思就是,怎么判断某个CALL是RSA算法的,怎么判断某个CALL是RSA运算结果的。
还有一个就是RSA的结果放到那里,最后一个问题就是它的倒序具体是怎么倒的,为什么是整体倒序而不是我的每四位倒序?
求高手指点,谢谢。

网上这个程序本身已PJ,请使用用户名test, 注册假码11111111-22222222-33333333-44444444-55555555-66666666-77777777-88888888
来小玩一下。上传地址:http://pan.baidu.com/s/1sllEKrj

评分

参与人数 2HB +2 收起 理由
禽大师 + 1
a2666392 + 1 把钱给我就行了

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-6 14:56 | 显示全部楼层

最佳答案本应属于楼主私有,因此限制查看

您还有0次查看次数,点此查看答案

点此购买查看次数
也可以兑换VIP特权或加入解密专家,每日可免费查看5次最佳答案!

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-7 15:37 | 显示全部楼层

username : xuepojie  key : DF360014-C043E5FB-784D041D-DD6F76E1-438D8732-46A5F543-8F0723B6-453D455B
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 菜鸟中的菜鸟 发表于 2016-8-8 08:20 | 显示全部楼层

LYQingYe 发表于 2016-8-7 15:37
username : xuepojie  key : DF360014-C043E5FB-784D041D-DD6F76E1-438D8732-46A5F543-8F0723B6-453D455B

算法牛,不是让您回复个KEY,问题是我不太明白里面的问题啊。。。。算法牛,可否做个图文教程?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-8 08:25 | 显示全部楼层

菜鸟中的菜鸟 发表于 2016-8-8 08:20
算法牛,不是让您回复个KEY,问题是我不太明白里面的问题啊。。。。算法牛,可否做个图文教程?

算法CALL,已经找到,写帖子的话,要花时间,况且牵扯到大数运算,不好解析
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 菜鸟中的菜鸟 发表于 2016-8-8 08:31 | 显示全部楼层

LYQingYe 发表于 2016-8-8 08:25
算法CALL,已经找到,写帖子的话,要花时间,况且牵扯到大数运算,不好解析

如果感觉太费时间,可否把关键的问题说一下,加密后的结果放到哪里了?还有一个就是倒序问题,为什么我感觉是每四个倒序一下,而原图文中是所有的都倒序过来。。给截几个图说明下哈。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-8 12:52 | 显示全部楼层

菜鸟中的菜鸟 发表于 2016-8-8 08:31
如果感觉太费时间,可否把关键的问题说一下,加密后的结果放到哪里了?还有一个就是倒序问题,为什么我感 ...

倒序很简单,例如RSA加密后,为 xuepojie,他会 每次按 4个字节 也就是 xuep   ojie  分组倒序,第一组从后面倒序,oeux , 然后第二组倒序,eijo ,最后组合 oeuxeijo
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-8 12:54 | 显示全部楼层

菜鸟中的菜鸟 发表于 2016-8-8 08:31
如果感觉太费时间,可否把关键的问题说一下,加密后的结果放到哪里了?还有一个就是倒序问题,为什么我感 ...

我上面说的是,RSA加密后的usrname倒序,Key的倒序,是分组 str1 -str2-.....-str8 倒序为 str8-str7....-str1
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-8-8 12:59 | 显示全部楼层

00409A10  /$  83EC 20       sub esp,0x20  这里就是 RSA大数运算了,估计,
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表