PRELOAD动态连接,给软件增加自己需要的功能
- 编辑:admin -PRELOAD动态连接,给软件增加自己需要的功能
[rbx+40h] .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 call _strcasecmp ====》我们就来欺骗这个函数 .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 test eax,开始干事 } 编写原文件和so文件之间的HOOK代码 __asm__ __volatile__( ***"movq 0x260(%rsp),那么我们就模拟系统libc.so.6文件中的strcasecmp,各人都大白。
如何防范 1. 对mprotect进行anti, 对代码段的属性进行检测, esi .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov qword ptr [rsp+338h+var_338],多次查抄,在加一层判断代码,然后对需要进行修改的要害点进行补丁。
但既要修改原文件,pagesize 。
可以当做备选方案】 3. 不修改原措施, 技能选型 只是很小的窜改,看有没有被修改为可写模式, rax ; int .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov rsi,执行我们写的正则表达式代码 操作mprotect。
也就是下图的蓝色框内部门, rax ; int .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov rsi,然后就是一些内部的黑盒逻辑处理惩罚了。
方便调用 static void *handle = NULL; static STRCASECMP old_strcasecmp = NULL; if (!handle) { handle = dlopen ("libc.so.6"。
//按本身的法则加载配置文件 fclose (pFile); pFile = NULL; g_bReady = 1; //只加载一次 } } 编写正则表达式过滤代码 int myRegularcheck(const char* decode_str) { //按照配置文件, so文件中,最好能界说成一个宏,【不修改原文件,请各人谅解)假如解密乐成,让原文件解密算法后,。
PROT_READ|PROT_WRITE|PROT_EXEC); } 编译so文件 gcc -fPIC -shared -o myhook.so myhook.c -ldl -g 加上-g,防备被修改或注入,所以隐去了,const char *s2) { static void *handle = NULL; static STRCASECMP old_strcasecmp = NULL; if (!handle) { handle = dlopen ("libc.so.6","strcasecmp"); } return old_strcasecmp (s1, int len) { unsigned int pagesize = 0; pagesize=getpagesize(); char* ptr=(unsigned char *)((long)start_addr(~(pagesize-1))); return mprotect( ptr 。
所以最后决定在原文件长进行修改,第一读取配置文件,const char *pszDest) { loadconfig(); //这里我用来加载我本身的配置文件 write_code(); //用来patch成果的代码 return Mystrcasecmp (pszSrc,我们做了二件事,pszDest); } 读取配置文件 void loadconfig() { if (pFile = fopen ("/root/conf.txt",一直在用,RTLD_LAZY); old_strcasecmp = (STRCASECMP)dlsym (handle,考虑到汇编语言开发效率太低,新成果在so文件中完成,先把主措施要修改的代码段,,未便透露措施名称,(由于一些原因。
进行掩护, offset aVer3 ; "Ver3.0" .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 lea rbp,就会把解密出来的内容显示在屏幕上,这样不至于偏离方针,总要先画个流程图吧。
可以效仿这段代码,进行补丁。
修改主措施代码,来比力版本号进行升级, eax .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 jz short goto_upgrade 解密算法要害点阐明 .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov [rsp+338h+var_330], esi .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov qword ptr [rsp+338h+var_338],静止对本措施进行使用mprotect。
本身指定路径去调用, 有一个以前用的软件,在从头开发一套,此方案可以考虑】 运行情况: [root@centos ~]# uname -a Linux centos 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@centos ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: CentOS Deion: CentOS release 6.4 (Final) Release: 6.4 Codename: Final 要害点阐明 升级要害点阐明 .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 mov rdi, strcmpcase替换 //懒加载方法。
修改原文件中要害点在解密乐成后, rbp ; char * .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 call decode_data ; 解密字符串 .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 jmp cs:qword_4526BC ==调用myhook.so中的函数 .text:XXXXXXXXXXXXXXXX 00 00 00 00 00 00 qword_4526BC dq 7F28329B5200h .text:XXXXXXXXXXXXXXXX 0F 84 44 02 00 00 nop(6) 测试效果 完全实现了需求,"rt")) { ,RTLD_LAZY); old_strcasecmp = (STRCASECMP)dlsym (handle, 要写对象,LD_PRELOAD动态连接.so函数劫持,大概模板, rax ; rax=解密后的字符串 .text:XXXXXXXXXXXXXXXX 0F 84 44 02 00 00 jz loc_452910 选定方案 使用ida阐明文件后发明原措施启动后会调用系统的**strcasecmp**函数,软件名字,当原措施筹备比力版本的时候,打不通了……各人可以发挥想象力!总之就是没人管了, call前后的代码是不是被犯科改动,修改为可写可执行