首页
社区
课程
招聘
[求助]貌似非常复杂,请高手帮忙看下这两个数据转换的算法
发表于: 2014-9-29 15:29 7750

[求助]貌似非常复杂,请高手帮忙看下这两个数据转换的算法

2014-9-29 15:29
7750
case: 见附件
命令:test.exe -i testin.txt -o testout.txt

程序中有两次数据转换,请算法高手帮忙分析下这两次数据转换的算法,试着跟了下,实在是看不太明白。

0E 8D 2D 71 D1 03 6B 26 A3 B8 B5 97 43 B9 FF 2B 50 F1 73 34 FB 45 DD 51 33 07 0F F8 36 0D

第一次数据转换 =>

EF A2 E5 5E 0E 3D 96 AB 9E E2 33 71 F6 28 A3 2D F4 7A DB 36 43 8D 7C A7 C7 4E 59 B5 B3 0A

第二次数据转换 =>

B6 D5 FE A1 99 E0 85 73 4A D4 48 55 08 51 B7 D2 0B 85 24 C9 BC 72 83 58 38 B1 A6 4A 4C 15

具体的
00464B73  |.  56            |PUSH ESI
00464B74  |.  51            |PUSH ECX
00464B75  |.  52            |PUSH EDX
00464B76  |.  E8 B5C9FFFF   |CALL lmcrypt._Ox4993

ESI = 0012D244, run过00464B76后check [0012D248],
0012D248  0E 8D 2D 71 D1 03 6B 26 A3 B8 B5 97 43 B9 FF 2B  ?q?k&8禇C?+
0012D258  50 F1 73 34 FB 45 DD 51 33 07 0F F8 36 0D 00 00  P駍4鸈軶3?...

0049FE03  |.  57            PUSH EDI
0049FE04  |.  56            PUSH ESI
0049FE05  |.  52            PUSH EDX
0049FE06  |.  E8 654CFCFF   CALL lmcrypt._Ox5206

run过0049FE06后check [0012D248]
0012D248  EF A2 E5 5E 0E 3D 96 AB 9E E2 33 71 F6 28 A3 2D  铫錨=柅炩3q??
0012D258  F4 7A DB 36 43 8D 7C A7 C7 4E 59 B5 B3 0A 00 00  魖?C峾NY党...

0049FE18  |.  57            PUSH EDI
0049FE19  |.  57            PUSH EDI
0049FE1A  |.  56            PUSH ESI
0049FE1B  |.  E8 00160000   CALL lmcrypt._Ox5164

run过0049FE1B后check [0012D248]
0012D248  B6 D5 FE A1 99 E0 85 73 4A D4 48 55 08 51 B7 D2  墩權卻J訦UQ芬
0012D258  0B 85 24 C9 BC 72 83 58 38 B1 A6 4A 4C 15 00 00  ?杉r僗8宝JL..

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 225
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PEID查看有 ECC和SHA1算法,具体的再自己跟一下。
2014-9-29 16:44
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
嗯,就是ECC的一部分~ 跟了下,这部分实在看不明白,所以来求助 希望有算法高手能帮忙看下。
2014-9-29 16:54
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
第二次数据转换看明白了,只是个简单的大数相加(和ECC椭圆曲线的n值相减),

n = 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5A 79 FE C6 7C B6 E9 1F 1C 1D A8 00 E4 78 A5

EF A2 E5 5E 0E 3D 96 AB 9E E2 33 71 F6 28 A3 2D F4 7A DB 36 43 8D 7C A7 C7 4E 59 B5 B3 0A
=>
B6 D5 FE A1 99 E0 85 73 4A D4 48 55 08 51 B7 D2 0B 85 24 C9 BC 72 83 58 38 B1 A6 4A 4C 15

第一个数据转换比较复杂,到现在还没弄清楚。
2014-10-1 17:16
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
第一个数据转换很复杂啊,哪位高人给看下,不胜感激!
2014-10-3 23:45
0
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就是常规的hash and sign数字签名吧。。。2楼的朋友不是已经给出了hash=SHA-1,sign=ECC具体实现吗?
2014-10-4 11:43
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
呵呵,好像不是的吧,您能给用SHA1 hash计算器给具体算下看看吗?

0E 8D 2D 71 D1 03 6B 26 A3 B8 B5 97 43 B9 FF 2B 50 F1 73 34 FB 45 DD 51 33 07 0F F8 36 0D

第一次数据转换 =>

EF A2 E5 5E 0E 3D 96 AB 9E E2 33 71 F6 28 A3 2D F4 7A DB 36 43 8D 7C A7 C7 4E 59 B5 B3 0A

另:我说的只是这段数据转换,不是指整个的ECC签名算法。
2014-10-4 12:58
0
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
只是提供个思路,具体的细节建议你可以看看数字签名的一些行业标准,至于是不是这样你自己去验证一下。

很明显从长度来看(SHA1的长度是160bit),肯定不是直接对你给的那串东西用sha1,这是很有讲究的,也是需要你去琢磨的。我对汇编不熟悉,帮不上什么。

下面这张图仅供参考:
上传的附件:
  • 1.jpg (253.56kb,2次下载)
2014-10-6 13:01
0
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个估计只是ECC乘法的一部分实现代码,你试试看看此时的调用堆栈,估计往外走几层才是核心的逻辑。

对调试什么的不太懂,好像可以对内存读下断点,留意一下内存中保存testin.txt内容的地址,什么时候被读了,猜测应该第二次或者第三次读的时候附带了其他信息一起做Hash。
2014-10-6 13:07
0
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好吧,我只想说
C:\Documents and Settings\share>"C:\Documents and Settings\share\桌面\test.exe"
--help
usage: lmcrypt [-i infile] [-o outfile] [-e errfile]
[licenses ...] [-r] [-verfmt ver] [-decimal] [-maxlen n] [-help]
[-r] Print copyright notice.
[-help] Display usage information.
If no input file, or if specified as - or stdin, stdin is used.
If no output file, or if specified as - or stdout, stdout is used.
If no error file, or if specified as - or stderr, stderr is used.
licenses are read and written back in place.
If no arguments, reads stdin and writes stdout.
-verfmt prints in old format and prints errors when
is newer than specified. Version formats are 2-5, 5.1, 6, 7 and 7.1

lmcrypt这东西,呃,我就不多说了,你往这个方向去找吧,也许你本来就知道这个东西只是想换个角度发上来而已。。。anyway,我对这类东西还是不太熟悉。
2014-10-6 14:42
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
呵呵,知道就不发了。

这个是FlexLM ECC的一部分(产生随机数k),可能(还不能100%确定)后面的数据B6D5...4C15与前面的数据“EFA2......B30A"无关,只是恰好放在同一段内存区域。

EF A2 E5 5E 0E 3D 96 AB 9E E2 33 71 F6 28 A3 2D F4 7A DB 36 43 8D 7C A7 C7 4E 59 B5 B3 0A

第二次数据转换 =>

B6 D5 FE A1 99 E0 85 73 4A D4 48 55 08 51 B7 D2 0B 85 24 C9 BC 72 83 58 38 B1 A6 4A 4C 15

但是感觉”B6D5......4C15"的导出过程很复杂,关键在下面的函数及其子函数(如0x5176)里,不知道是不是某种特定的算法,跟起来非常吃力,如果有算法高手帮忙解读下就好了。 算法我不是太懂,就像之前的SHA1,如果没有懂算法的人指点下,估计还在里面转悠呢。

0048AE08  |.  E8 734E0100   CALL lmcrypt._Ox5053
2014-10-6 23:11
0
雪    币: 484
活跃值: (269)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
貌似非常复杂,一层层进去,需要跟踪的数据越来越多,可能里面有相关的算法问题没弄清楚,期待高手指点迷津!
2014-10-9 17:21
0
游客
登录 | 注册 方可回帖
返回
//