能力值:
( LV2,RANK:10 )
2 楼
可能的原因有两个:
1、如果是ecc加密,那么,程序就不会执行到有3D4DA1D6的地方
2、如果不是ecc加密,程序中有3D4DA1D6,而且代码形式类似的地方应该不止一处两处,试着把你所找到的所有含3D4DA1D6的地方都下上断点,然后再试试看
能力值:
( LV2,RANK:10 )
3 楼
谢谢老伙计,
不过还是不行呀。
1、没有ecc 2、所有的我都断了,还是不行。
说明:
试过ida pro 5.5 但要glibc2.4 ,好不容易在rhel4.8上升级了glibc,能用ida pro5.5了,但不中断。
又试ida pro 5 这回不要glibc2.4了,但仍不中断
呜。。。。
能力值:
( LV2,RANK:10 )
4 楼
809b449: 83 bd 64 fd ff ff 00 cmpl $0x0,0xfffffd64(%ebp)
809b450: 0f 84 3a 07 00 00 je 809bb90 <strcpy@plt+0x51bd4> <--- couldn't jump here !
809b456: c7 45 ec cc 46 0c 08 movl $0x80c46cc,0xffffffec(%ebp) <--- we should continue here !
806c58f: 3a 04 11 cmp (%ecx,%edx,1),%al <--- license key check point !
你可以试着让程序在0x0809b449处不跳,然后3D4DA1D6就可以正常拦截了。
能力值:
( LV2,RANK:10 )
5 楼
谢谢老伙计
我来研究一下。呵呵
能力值:
( LV2,RANK:10 )
6 楼
我改了809b450 of 84 3a .... 为 809b450 of 85 3a ....
变成了jnz
在ida pro 5.0中按F9 ,这下在ida中不出错了,但仍不中断。
我发现linux 端出现
Vendor daemon can't talk to lmgrd (Cannot connect to license server (-15,12:111 "C onnection refused"))
Closing incoming connection...
请教老伙计,请问,你是如何认定要在这儿不能跳转的? 呵呵
能力值:
( LV2,RANK:10 )
7 楼
我试着在809b450 处 用F8 逐步调试,可以走,但不到806c58f,就出现linux端的 lmgrd 错误,呵呵。
看来,是不是哪儿设置错了?
能力值:
( LV2,RANK:10 )
8 楼
更正一下,前面所说许可逐字节比较的地址有误,应该是这样的:
806c58f: 3a 04 11 cmp (%ecx,%edx,1),%al <--- 错误,程序不会执行到这里
809c27f: 3a 04 11 cmp (%ecx,%edx,1),%al <--- 正确,程序在这里检查许可
关于在 0x0809b450 处不跳转,你只要把
809b450: 0f 84 3a 07 00 00 je 809bb90 <strcpy@plt+0x51bd4>
这条指令改成6个nop就可以了。另外,关于下断点的地方,不知你选对了没有,应该在如下两处:
809b6bd: e8 e6 0c 00 00 call 809c3a8 <strcpy@plt+0x523ec>
809b6c2: 83 c4 04 add $0x4,%esp <--- set break point here ! $eax contains the ENCRYPTION_SEED1
809ba41: e8 62 09 00 00 call 809c3a8 <strcpy@plt+0x523ec>
809ba46: 83 c4 04 add $0x4,%esp <--- set break point here ! $eax contains the ENCRYPTION_SEED2
不信你试,一定能断下来
我是在linux系统下直接使用DDD(gdb)调试的,你的调法我没用过,不好妄加评论。
能力值:
( LV2,RANK:10 )
9 楼
十分感谢老伙计的热心帮助。
我再试。
能力值:
( LV2,RANK:10 )
10 楼
看来我的那种方法不适应此类linux的反汇编,当然更有可能是我的设置有问题。
当然欢迎用过ida这种远程linux的方式的大侠多指点 ,在这先谢谢了。
暂时搁一边,先按 老伙计 的方法搞通后再来研究。找ddd .....
能力值:
( LV2,RANK:10 )
11 楼
这个DDD 有点难入门。
我打开 program ,怎么什么也没有呀?
老伙计,帮忙写一个简单的操作过程,谢谢(呵呵,有点不好意思。但实在搞不定。搜了半天,也没找到一个关于这个与flexlm相关的ddd的说明,都是些c语言方面的调试。
)
我按了一下 run ,加了参数 -c license.dat 是只到flexlm的一些相关信息。连二进制的码都不见。呵呵
能力值:
( LV2,RANK:10 )
12 楼
终于中断了,十分感谢老伙计。
不过,我没有用ddd ,实在找不着北。。
还是用了ida
原来我犯了个低级错误,每一次用ida pro 中的patch program 把二进制改了后,结果一运行,ida用的还是原来没改的。
,后来,用ultraedit一改,呵呵。好了。
终于找到了seed
但我发现,这两个seed 只对license.dat中
已有的feature 有效,
没有的,则好象不对 ,请问为什么?
不过还是有几个不明白的地方需要请教老伙计:
1、怎么知道要改809b450的这个地方的跳转的?
2、怎么知道那两个断点的位置。
我真的想知其所以然。呵呵
再一次感谢老伙计。
能力值:
( LV2,RANK:10 )
13 楼
你的说法有误,这两个seed就是开发商最核心的秘密,通过它们制作的注册机,随便设定任何的FEATURE都可以生成与之对应的权威license key--就像是出自软件开发商之手,FLEXlm认证系统都可以检查通过。所以,这两个seed并不仅限于license.dat中已有的FEATURE。
至于你问到的几个"怎么知道。。。",我只能说是基于经验和感觉,俗话说"熟能生巧",等你接触和研究这类问题足够多了以后自然也会有的。
能力值:
( LV2,RANK:10 )
14 楼
老伙计,你说的是对的。真的谢谢你。
我现在得认真潜下心来研究那几个怎么知道。呵呵。
谢谢啦!
能力值:
( LV2,RANK:10 )
15 楼
我发现,关键的问题是让它停下来,只要停下来就好办了。
能力值:
( LV2,RANK:10 )
16 楼
程序正常运行中,不是所有程序都会在3D4DA1D6这里过。下面引用一段经典的话。。。
"The default value to clean the seeds variable is 3D4DA1D6h. A lot of vendors are lazy or foolish and don't change this default value. So, a very easy way is just search the pattern 3D4DA1D6h in disassembled codes. You'll get a lot of codes like this : mov [ebp-xxxx], 3D4DA1D6h. Just break on every instance containing this value and ....... run. If the program is checking the license, write down the value in [ebp-xxxx] when the first breakpoint is reached. It's your seed1 (not XORed with key5, it's original seed1). The second breakpoint you get, it's seed2. And trace a little back to the function entry, the keys (1~4) are in the parameters. Anyway, this method won't work for every case, but for beginner, it's easy to learn. ;-)."
能力值:
( LV2,RANK:10 )
17 楼
呵呵,谢谢老大。
最近几天在学习flexlm ,通过看雪这个平台,遇到了象"老伙计"及楼上 这么一些热心的人。
真的非常感谢。我再继续努力。
能力值:
( LV2,RANK:10 )
18 楼
要善于用多种方法得到自己想要的东西。。。