我最近研究一款软件,采用查字符串出来的是 v9.2版本的,lmutil lmver 命令检测结果和我用查找字符串的方法得到的结果都是:FLEXlm v9.2.0 (lmgr.lib),但是程序运行过程中
0013E4A4 39300020 .09
0013E4A8 0000302E .0..
貌似9.0版本?这是为何呢,是不是9系列的在调试时都显示 .09.0..
第二询问:我在_l_sg中下了三个断点(参考的是laoqian文),采集d [esp],d[esp+8]数据,
然后采用calcseed.exe代入5个数据+1个VENDOR字符串,结果每次采集的数据都差1位,我不知道为什么?我想请问类似如下数据:
d[esp+8]
0013E484 00000004 ...
0013E488 6001C9D9 偕` data[0]
0013E48C 7216C997 椛r data[1]
0013E490 1808A1E5 濉 VENDOR_KEY1(这个貌似我瞎猜的,和VENDOR_KEY无关)
0013E494 ED49CD55 U虸 VENDOR_KEY2
0013E498 0E5D66DC 躥] VENDOR_KEY3
0013E49C CF2BD09D 澬+ VENDOR_KEY4
0013E4A0 00020009 ... VENDOR_KEY5
0013E4A4 39300020 .09
0013E4A8 0000302E .0..
d[esp]
01E1F0B8 00000066 f...
01E1F0BC 00FE0085 ??
01E1F0C0 C18F5FDE 轤徚 job+08
01E1F0C4 00E7E232 2忡. job+0c
01E1F0C8 004A0000 ..J. job+10
01E1F0CC 00000000 ....
这个过程应该是没问题的,我也是采用了fake的 sign,遇到之前的je short_xxxx也是第一次跳过,第二次到之后的 call _l_n36_buff停下,然后F8步过,查看的内存值。
现在的疑惑是,如果按照上面的,我的理解是:
data[0]=0x6001C9D9
data[1]=0x7216C997
job+08=0xC18F5FDE
job+0c=0x00E7E232
job+10=0x004A0000
但是用这组数据和不会有错的VENDOR,利用calcseed计算结果就总是相差第三个BYTE的值,0x1122xx44,也就是xx两位总是不相同。
我随意测试了逆序,也就是我把上述五个数字的顺序逆过来:
0xD9C90160,0x97C91672,0xDE5F8FC1,0x32E2E700,0x00004A00
这组数据居然对每次不同的数据都能计算得到固定的 encrypt_seed1和encrypt_seed2。
但是问题是,我用得到的这两个加密种子,也算不出正确的 sign。
请大侠给我指点,关于data和job的顺序,到底是否存在特殊情况,你们都是怎么处理的。
还有一个问题是请问 ollydbg中注释中出现的函数名是怎么加入的,IDA我知道是采用sig,结果sig做好了,加入分析也有很多引用,但就是没见到名称,请教各位大小有没有出现过这种情况,谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)