首页
社区
课程
招聘
[原创]使用vc调试flexlm后台程序Daemon
发表于: 2007-3-5 18:01 8626

[原创]使用vc调试flexlm后台程序Daemon

2007-3-5 18:01
8626

【文章标题】: 使用vc6调试flexlm后台程序Daemon
【文章作者】: 江湖无赖

【详细信息】:
        目标程序不方便写出来这里使用vendor.exe替代。
        开始时使用laoqian文中介绍的方法获得job和data后计算出来seed,但是生成的license总是不正确。使用W32dsm8.93+.exe的anit-wdasm.exe静态反汇编与lmgrd相关的dll总是出现异常崩溃,使用IDA能够正常地静态反汇编。看来可能有反静态汇编的代码在里面。我懒得去跟踪这个问题。于是在继续在看雪论坛搜索好多天把所有与flexlm相关的帖子逐个看了一遍才找到xzwlyx整理的marstj方法可以使用调试daemon的办法直接获得seed,用W32dsm8.93+.exe反汇编vendor.exe能够获得所有信息。狂喜~~~
        使用UE修改vendor.exe的OEP处的代码为cc,修改ollyDBG为实时调试模式,使用lmtools运行vendor.exe服务。ollyDBG正常调出。但是单步执行到getmodulefilename函数处就没有响应了,好像是进入死循环。google查了getmodulefilename函数是windows的核心函数,这个函数很普通不应该是反跟跟踪程序。我不进行跟踪的时候lmtools能够正常启动license服务。现在我也不能够确定程序是否有自校验还是有anit-debug。
        无奈之下我决定换台机器使用softice试试(网络就是好,想当年在学校用36k的猫,用201电话卡拨号上网找资料哪里敢下在200+M的程序,时间就是金钱啦!!)。然后意外的是我的vc6先执行起来了,我恢复OEP后按F5键,程序既然正常运行了,看来vendor.exe里面没有对vc6进行anti-debug,这个很显然,因为flexlm SDK使用vc6编译,如果对vc6使用了anti-debug他的程序根本无法调试问题。最后按照marstj中的方法获得seed,添加到flexlm SDK编译运行,生成license,运行程序,bingo! 程序起来了。看来使用vc6可以避免anti-debug的困扰,这里说说使用方法,供大家在debug中多一些手段。

        1)寻找算法代码
        /*------------------------------xzwlyx---------------------------------*/                       
                                                                83BD90FEFFFF08 是 FlexLM v10.x 以后的               
                83BD74FEFFFF08 是 FlexLM v9.x 以前的
                个别版本需要自己验证,是这种代码 83BDxxFEFFFF08
                在它的前面一定有一个 add ecx, 00000001
        /*------------------------------xzwlyx---------------------------------*/
        vendor.exe的算法代码在0041BE7F处。
        2)使用UE在vondor.exe的OEP处修改代码为cc
        3)配置好lmtools,运行licnese服务。vc会弹出一个程序异常的对话框,点击取消,进入vc调试模式。这个时候程序中断在OEP地址处。在vc的菜单上面单击右键在确认右键菜单中memory被选中。
        4)恢复OEP代码,在memory窗口中的address里面输入EIP回车,这是memory里面就是当前OEP的汇编代码,将OEP除的cc改回原来的代码。
        5)ctrl+G 在对话框里面输入0041BE7F,往下走在0041C055和0041C1B0处分别设置断点

==================================================================================================
0041BE73 C7 85 74 FE FF FF 00 mov         dword ptr [ebp-18Ch],0
0041BE7D EB 0F                jmp         0041BE8E                                                                       
0041BE7F 8B 95 74 FE FF FF    mov         edx,dword ptr [ebp-18Ch]       
0041BE85 83 C2 01             add         edx,1                                                                                                ;注意这里的add edx,1
0041BE88 89 95 74 FE FF FF    mov         dword ptr [ebp-18Ch],edx                ;
0041BE8E 83 BD 74 FE FF FF 08 cmp         dword ptr [ebp-18Ch],8                        ;算法特征码83BD74FEFFFF08
0041BE95 7D 2B                jge         0041BEC2
0041BE97 8B 45 F4             mov         eax,dword ptr [ebp-0Ch]
                                .
                                .
                                .
0041C04A 88 10                mov         byte ptr [eax],dl
0041C04C 8B 4D F0             mov         ecx,dword ptr [ebp-10h]
0041C04F 83 C1 01             add         ecx,1
0041C052 89 4D F0             mov         dword ptr [ebp-10h],ecx                                        ;3D4DA1D6h是清除seed的值
0041C055 C7 85 44 FE FF FF D6 mov         dword ptr [ebp-1BCh],3D4DA1D6h        ;seed1 = [ebp-1BCh]
0041C05F 8B 55 F8             mov         edx,dword ptr [ebp-8]                                                ;[ebp-1BCh]是seed1
0041C062 C1 E2 04             shl         edx,4
                                .
                                .
                                .

0041C1AA 83 C1 01             add         ecx,1
0041C1AD 89 4D F0             mov         dword ptr [ebp-10h],ecx                                        ;3D4DA1D6h是清除seed的值   
0041C1B0 C7 85 40 FE FF FF D6 mov         dword ptr [ebp-1C0h],3D4DA1D6h        ;seed2 = [ebp-1C0h]        
0041C1BA E9 FB 00 00 00       jmp         0041C2BA                        ;[ebp-1C0h]是seed2                          
0041C1BF C7 85 70 FE FF FF 00 mov         dword ptr [ebp-190h],0
0041C1C9 EB 0F                jmp         0041C1DA
0041C1CB 8B 95 70 FE FF FF    mov         edx,dword ptr [ebp-190h]
0041C1D1 83 C2 01             add         edx,1
0041C1D4 89 95 70 FE FF FF    mov         dword ptr [ebp-190h],edx
0041C1DA 83 BD 70 FE FF FF 08 cmp         dword ptr [ebp-190h],8
0041C1E1 0F 8D D3 00 00 00    jge         0041C2BA
0041C1E7 8B 85 70 FE FF FF    mov         eax,dword ptr [ebp-190h]
0041C1ED 25 03 00 00 80       and         eax,80000003h
0041C1F2 79 05                jns         0041C1F9
==============================================================================================
        6)第一次断下来后在memory窗口的address中输入ebp-1c0,然后在该窗口上面点击鼠标右键->Long Hex Format。这时就是seed1的值
        7)第二次断下来后得到的就是seed2的值
        8)编译flexlm SDK构造license
       
        总结:
                对于vc的一些功能不如专业的反汇编工具作的好,不过vc的操作界面还是比较合理的,另外就是大多数anti-debug都不敢对vc进行anti-debug。可以省去很多不必要的麻烦
               
        参考资料:
                《用VC和自制工具VCDEBUG助手进行跟踪破解》(看雪精华4) 作者:fnlq[BCG&&CNCG]
                《On Software Reverse Engineering 》                作者:CrackZ(原文)/sln(翻译)
                《制作Flexlm license总结》        (看雪精华7)        作者:laoqian
                《FLEXLM 系统高级研究(翻译)》(看雪精华8) 作者:CrackZ(原文)/shaoge(翻译)
        感谢:
                感谢所有与该过程相关的人,另外提到两个人marstj、xzwlyx。没有找到他们的精华贴,但是他们在论坛的讨论给我是能够找到seed的关键所在


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不太懂,遗憾的是没提供程序,可惜!
2007-3-6 17:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也遇到相同的问题,算法地址应该是找到了,但od好像陷入死循环,一直无响应,但是用vc调试也不能断到指定位置,不知道是什么原因。debug 窗口显示一下信息:
Loaded 'C:\WINDOWS\system32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\netapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comdlg32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shell32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
请指点迷津,不知道会是什么问题
对了vendor.exe是flexlm 8.2a的
2007-6-4 22:34
0
游客
登录 | 注册 方可回帖
返回
//