首页
社区
课程
招聘
[原创]任意文件转obj/lib的小工具(附源码)
2016-12-30 23:51 7265

[原创]任意文件转obj/lib的小工具(附源码)

2016-12-30 23:51
7265
很久没有来逛了,从论坛下载了不少各位大侠的作品,但大多成了收藏品,还是非常感谢各位网友!
    分享一个小工具吧,它没有什么大用,主要用来打包,可以把任意文件转换成obj/lib,方便在程序中引用。
为什么要这样呢?原因很简单:
     1)如果你作为resource导入工程当然可以,但别人用……比如VC,open as resource就看见了,另存为就完整的抓到了。7zip提取资源也很easy。可能你不介意这个。
     2)你自己要用的时候要FindResource()/LoadResource(),大概勤劳的你也不介意。
     3)你可以压缩文件减小尺寸,加密文件以防字符串查找什么的。大家可以自由发挥,虽然我没提供这类功能。当然,作为资源也可以这样做。
用法:
在命令行下运行
    cvmk 文件列表
得到libbin.h/.lib,链接到你的工程里面即可。文件列表可以是单个文件,也支持通配符*/?。
    由于我比较懒,批处理命令最多只接受9个参数,对于聪明的你应该够用了。比如你要转换一堆DLL,放到A:\binary目录下,在A:\binary目录下执行 cvmk *.dll,只用了一个参数。
   用的地方
       #include "libbin.h"
       #pragma comment(lib,"libbin.lib")
    假设源文件是abc.dll,libbin.h里面会定义ORG_SIZEOF_ABC_DLL为源文件的字节数,extern unsigned char  abc_dll[],这个数组就是源文件的内容。注意:这个声明不要改,这样声明最简洁,不信你改别的样式试试。
    已知缺陷:基本文件名相同,扩展名不同的多个文件不能转,原因是转换时简单地去掉了扩展名,只产生一个.obj。
    最后说明一下,里面附带的工具是VC6的,源码只有区区4KB。你可以做一些改动以适合你的需要。比如数据段名不叫.rdata,或者包含共享属性,或者可执行,或者其他的CPU架构,诸如此类。
     祝各位网友新年快乐!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (13)
雪    币: 797
活跃值: (1056)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
bambooqj 2016-12-31 00:53
2
0
我曹  新年干货啊。。    用处很大。。
雪    币: 719
活跃值: (782)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
落笔飞花 1 2016-12-31 01:17
3
0
路过······
雪    币: 345
活跃值: (3402)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
小菜鸟一 2016-12-31 09:40
4
0
先收藏一份  感谢
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
Rprop 2016-12-31 13:04
5
0
直接转成源码也行
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
DoItFreely 3 2016-12-31 14:22
6
0
转成源码数组要重新编译,文件太大的话会把编译器挂调。
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
DoItFreely 3 2016-12-31 14:24
7
0
转成数组源码需要编译,文件大需要调整编译器的堆栈大小才能编译,文件太大就把编译器整挂了。
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
Rprop 2016-12-31 14:56
8
0
文件大到这样的程度就不要放PE了,直接仍结尾
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
核心未拥有 2016-12-31 17:08
9
0
VS 2015 编译不通过
雪    币: 435
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqsunqiang 2016-12-31 19:48
10
0
谢谢楼主的分析。
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
panti 2017-3-4 06:45
11
0
雪    币: 288
活跃值: (244)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sjh_pediy 2017-3-4 11:39
12
0
不错的思路
雪    币: 387
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张双峻 2017-3-4 16:09
13
0
mark
雪    币: 20
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_咖啡_552099 2018-3-11 23:39
14
0
DoItFreely 转成数组源码需要编译,文件大需要调整编译器的堆栈大小才能编译,文件太大就把编译器整挂了。
测试转换  abc.dll  为lib后,  使用时编译出错:  无法解析的外部符号  "unsigned  char  *  abc_dll"  (?abc_dll@@3PAEA)   
声明改成  extern "C" unsigned char abc_dll[]; 编译通过
最后于 2018-3-11 23:40 被wx_咖啡_552099编辑 ,原因:
游客
登录 | 注册 方可回帖
返回