返回自定义时间戳

时间:2017-03-16 12:56:22

标签: python linux hook reverse-engineering

我有一个Linux可执行二进制文件(C或C ++编译)。在某些时候,程序使用时间戳来生成随机数

我需要实现一定数量的随机数,所以我想创建一个脚本(Preferable python)来拦截对系统的调用(AFAIK这叫做“挂钩”)来获取时间戳并返回一个自定义值得我得到我需要的序列。我必须这样做,因为可执行文件不使用整个时间戳,就像timestamp % 10000

这可能吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

这只能通过内核中完成。所以你不能使用Python(或任何其他用户空间程序),你必须使用C。

一种选择是在可加载的内核模块中执行此操作。 你可以找到一个例子,例如here

答案 1 :(得分:1)

使用库预加载机制,可以拦截和替换呼叫。对于已与C库动态链接的二进制文件,您可以拦截调用__kernel void search_sort_particles(__global float4* p_pos, __global int* cell_particles, __global int* cell_number_of_particles, float4 lb, int4 c_n, float c_size) { int i = get_global_id(0); int max_cell_particles = 20; int4 c_pos; // determine cell position c_pos.x = floor((((p_pos[i].x - lb.x) / c_size))); c_pos.y = floor((((p_pos[i].y - lb.y) / c_size))); c_pos.z = floor((((p_pos[i].z - lb.z) / c_size))); int c_idx = c_pos.x + (c_n.x * c_pos.y) + (c_n.x * c_n.y * c_pos.z); // determine cell index // store particle index in cell cell_particles[c_idx*max_cell_particles + cell_number_of_particles[c_idx]] = i; cell_number_of_particles[c_idx]++; } 等,以模拟不同的时间。

开源" libfaketime"项目已经实现了伪造时间:https://github.com/wolfcw/libfaketime