- 博客(29)
- 资源 (14)
- 收藏
- 关注
原创 文件拼接检查
3.doc文件可以正常打开,但是看不到隐藏起来的2.png,可以通过对文件结构进行分析属于doc文件部分的内容,计算大小,如果文件真实大小比doc的内容大小大,则可能含拼接了其它文件,基于这个思路,可以将多个文件拼接出的文件进行拆分。文件检测需要根据文件结构进行大量的读操作,如果使用read和pread等系统调用进行数据读取,效率低下,可以使用mmap进行文件内存映射,由操作系统的page fault来按需要读取,可以大大提高效率。
2024-07-27 22:26:58
61
原创 emf文件在linux使用inkscape, libemf2svg libuemf poi读取中文乱码问题分析
identical to the font used to generate the indexes.说明文字中使用的index而不是文字对应的编码,这个是window系统特有,linux上的inkscape和libuemf没有ETO_GLYPH_INDEX这个的实现,所以在转码时把index当作utf16进行解码,因此出现乱码。
2024-07-14 19:53:18
231
原创 linux 4.4 stub_execve hook
可以使用汇编代码手动平衡栈,使得执行stub_execve时栈与未hook时保持一致,代码如下,原理是调用my_sys_execve函数前保持寄存器,调用完后恢复寄存器,这样在执行orig_stub_execve函数的时候上下文环境与未hook一致,不会造成内核panic,这种方法有个局限性,就是post hook难以实现(可以通过重写stub_execve来实现,call sys_execve后面插入自己的代码,不够这个方法可能会因为stub_execve代码结构的变化导致失效,不够通用)
2024-05-14 11:19:20
168
原创 CR0 WP bit went missing!?
linux 内核使用write_cr0(cr0 & ~CR0_WP)修改sys_call_table进行hook是报错。这是因为 write_cr0中镜像了检测,可以通过重新实现这个函数来规避这个问题。
2024-05-09 13:00:58
145
原创 linux java 发送和接收指定源组播
kylin3.5国产化操作系统上默认的java环境是java6,没有发送和接收指定源组播的接口,接收指定源组播是通过setsockopt系统调用来实现的,java下可以通过jni来实现这个功能。
2024-04-21 12:08:40
220
原创 python 接收指定源组播
python默认没有接收指定源组播的接口,下面是linux下接收指定源组播的代码,这要通过setsockopt来设置接收。
2024-04-21 11:58:06
188
2
原创 判断linux系统调用是否使用struct pt_regs*传参的方法
为了让代码自适应这种接口的变化,通过hook close系统调用来判断系统调用使用哪种传参方式,判断的原理是这样的,close函数对应的参数只有一个,使用my_sys_close替换syscall_table中的sys_close。close传参值是个int,而pt_regs是一个指针,在64位系统下一个是4个字节,一个是8个字节,同时pt_regs是个内核指针,有效值是个远超int的范围,因此通过值大小可以判断close使用哪种方法传值。
2024-04-21 11:12:38
148
1
原创 qt cannot find symbol _Z34QBasicAtomicInt_fetchAndAddOrderedPVii
qt运行时版本库不一致造成的,使用c++filt查看_Z34QBasicAtomicInt_fetchAndAddOrderedPVii符号对应的接口为QBasicAtomicInt_fetchAndAddOrdered(int volatile*, int)运行时找不到符号,那么我们实现这个符号对应的函数就可以了,查看qt源码,我开发的平台了飞腾cpu的linux 系统,在代码中插入下面的代码,编译,再运行无报错。
2024-04-21 10:21:22
235
1
原创 linux中使用plt hook read函数失效
使用PRELOAD环境变量优先加载so文件,在kylin上老版本wps可以查看到打开的文件,在新版本上打开doc文件没有下面代码输出。libc中使用汇编代码实现了read系统调用,而plt hook的read符号是libc中的read符号,因此失效。深入分析发现,打开文件时read系统函数的调用路径中包含了。
2024-04-02 15:06:08
297
1
原创 linux so库中获取当前so的路径
dlopen运行时加载库时可以使用相对路径和绝对路径,相对路径是相对于当前工作目录,如何让so中加载其它so文件时使用相对于so的路径?(这么做是因为so文件路径和可执行程序的路径关系不明确,可以使用path环境变量来改变),这时候可以用在so中使用get_current_so_dir来获取so的路径。
2024-04-02 14:15:56
355
1
原创 linux wps窗口水印
支持龙芯,飞腾等多种国产化平台和uos kylin等各类linux操作系统,完美嵌入到wps窗口,不存在拖动延迟和遮挡时水印显示在其他窗口等问题,支持文档切换时水印跟随切换。
2024-03-31 12:32:57
257
1
原创 linux 窗口水印
参照基于Linux系统的应用程序窗口水印添加方法和装置_张黎这个专利,使用x11捕获目标窗口的ConfigureNotify事件来获取窗口位置变化,使用qt创一个透明的水印窗口叠加在目标窗口上,demo代码。
2024-03-31 12:10:01
206
1
原创 wchar_t在linux上和window的区别
wchar_t在window上每个字符2个字节,utf16编码,在linux上4个字节,utf32编码,qt中使用QString::fromUtf16转换window对应的wchar_t。
2024-03-17 19:41:10
153
1
原创 linux内核写文件提示文件过大
在内核中使用filp_open打开一个文件,通过vfs_write写,发现文件只能写到2147483647这个大小,超过这个大小提示文件过大,原因是打开文件缺少O_LARGEFILE标志位
2022-01-21 09:49:09
1020
原创 c语言宏连接展开问题
#define Vector Num ## Vector#define num float#define Num Floatstruct Vector{ num *data; int n;};上面的代码我们期望得到的是:struct FloatVector{ float *data; int n;};通过gcc -E参数获取的结果却是:struct NumVector{ float *data; int n;};原因是因为C的宏定义在出现`#`...
2021-03-21 08:39:48
397
原创 在win7 sp1上安装vs2013 wdk8.1时MSB8003错误解决过程
在win7 sp1上安装vs2013 wdk8.1时MSB8003错误解决过程按照网上教程,win7 sp1, 先按照vs2013,再安装wdk8.1,生成解决方案是报"warning MSB8003: Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformTool...
2020-05-07 07:15:32
1910
原创 记一次c函数传参
#include <stdio.h>void test(void *udata){ printf("%d %f", *(int *)((void **)udata)[0], *(double *)((void **)udata)[1]);}int main(int argc, char **argv){ int a = 1; double b =...
2020-04-30 19:34:23
95
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人