欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[分享]IDA dump ASM code + FlexLM SDK编译生成带VSTRING验证的licgen

[分享]IDA dump ASM code + FlexLM SDK编译生成带VSTRING验证的licgen

IDA dump ASM code +  FlexLM SDK编译生成带VSTRING验证的licgen
首先,感谢论坛里帮助过我的朋友,恕不一一列举:)
花了不少时间研究并最终做出注册机,这里只是与有兴趣的朋友分享下,高手请飘过:)
工具:IDA5.5, RadASM2.2.1.9, FlexLM SDK 11.4, VC2003或VC2008
目标:用FlexLM SDK开发带VSTRING的licgen(license格式如下)
SERVER hostname 12345678
DAEMON testlmd ./testlmd
INCREMENT feature_name testlmd 2013.6 16-dec-2013 1 \
    1234567812345678abcd VSTRING=XXXXXXXXXXXXXXXXXXXX
一. 如何开发程序vstring_crypt
1. 读懂应用程序中VSTRING的产生算法后,编写C程序
2. 参照《C++反汇编与逆向分析技术揭秘》一书第17章“反汇编代码的重建与编译”,读懂应用程序中VSTRING的产生算法后,将产生VSTRING的子程序用IDA反汇编后dump成ASM代码,编译成vstring_crypt.obj文件,编译FlexLM SDK时调用vstring_crypt.obj
本人C编程功力不够,所以采用方法2.
关于从IDA中dump出ASM code,可以参考
<1> 从IDA中提取代码做汇编注册机之C/C++篇
    http://bbs.pediy.com/showthread.php?t=36799
<2> 从IDA中提取代码做汇编注册机之VB篇
    http://bbs.pediy.com/showthread.php?t=36400
<3> 《C++反汇编与逆向分析技术揭秘》一书第17章“反汇编代码的重建与编译”
<4> erfaren关于IDA反汇编的几篇文章(原文是俄文的,可以用google chrom浏览器翻译成英文)
    http://erfaren.narod.ru/Asm/asm.htm
<5> IDA反出来的ZeroAdd源代码稍作修改后,编译通过
    http://bbs.pediy.com/showthread.php?t=17347
关于ASM
<1> 编译时加入/Zm选项,Enable MASM 5.10 compatibility
<2> .model flat, C => 此处需用C选项,否则VC LINK时会报找不到vstring_crypt
<3> EXTRN _alloca_probe:PROC => 库函数在C编译后会在函数名前加"_",所以需将IDA反汇编出来的"__alloca_probe"修改为“_alloca_probe”
<4> uni.ini => 参照erfaren的文章
        unicode macro page,string,zero
                irpc c,<string>
                db '&c', page
                endm
                ifnb <zero>
                dw zero
                endif
        endm
<5> IDA的版本与产生的ASM code似乎有些关联,从已有版本的测试结果看IDA5.5出来的结果编译错误较少
二. FlexLM SDK编译
假设VSTRING与feature_name和license版本等等相关
1. VSTRING产生的程序命名为vstring_crypt, 修改SDK(lmcrypt.c)将vstring_crypt的输出作为lc_cryptstr的输入
extern char * vstring_crypt (char *);
......
vstring = (char *)vstring_crypt((char *)str);
if (lc_cryptstr(lm_job, vstring, &ofile_str, /*&v*/code,
      forceit, ifname, &err))
{
  ......
}
2. VC LINK时加入vstring_crypt.obj
LINK /nologo /NODEFAULTLIB /OPT:NOREF  /out:lmcrypt.exe lmcrypt.obj lmgr.lib libsb.lib libcrvs.lib .\activation\lib\libnoact.lib oldnames.lib kernel32.lib user32.lib netapi32.lib  advapi32.lib  gdi32.lib comdlg32.lib  comctl32.lib wsock32.lib libcmt.lib vstring_crypt.obj
或者修改i86_n3\makefile
LD = LINK /nologo /NODEFAULTLIB /OPT:NOREF $(LDFLAGS) vstring_crypt.obj

上传的附件 i86_n3_makefile.rar
machind_lmcrypt.c.rar
vstring_crypt.asm.rar
vstring_crypt.obj.rar
sample.rar
lmcrypt_vstring_crypt_testlmd.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功