x64dbg断点遇到CALL的返回值RAX是日期,该怎么改?
软件是 Navicat 15,官网下载的最新试用版
逆向到这里,遇到一个函数需要返回过期时间,如上图,1969/12/31
看起来像是时间戳的起始值,毕竟1970/1/1 和 1969/12/31基本没区别
1但我想知道x64dbg是怎么计算出这个时间的?
从寄存器里所指向内存地址的数据来看,如果取前四个字节,则是 00 99 D2 0B
这四个字节,无论正反向转换成十进制,都和 1969/12/31 的时间戳不同
最最关键的是,这个值每次重新加载都不一样,还是那句话,这个时间x64dbg是怎么计算出来的 内存地址是内存地址,不一样是正常的,需要转到这个内存地址去看数据。其次不是x64dbg怎么计算这个数值的,他不会给你计算,这个是个字符串,已经从时间戳变成了字符串,并不是调试器给你计算的 日期的类型一般是个结构体 本帖最后由 你不会了解 于 2021-11-17 14:39 编辑
FSA4565 发表于 2021-11-17 13:48
内存地址是内存地址,不一样是正常的,需要转到这个内存地址去看数据。其次不是x64dbg怎么计算这个数值的, ...
已知汇编代码如下:
call navicat.442500
movrax, rbx
此时RBX寄存器:内存地址1
内存地址1的值 =>内存地址2
内存地址2的值 =>31 00 39 00 36 00 39 00 2F 00 31 00 32 00 2F 00 33 00 31 00
将内存地址2的值,通过Unicode编码转换后,变成了 1969/12/31
也就是说,上面汇编代码,函数返回值rax将取得rbx所指向的数据
现在我的想法是,将 mov rax, rbx 改掉,比如改成mov rax, 2969/12/31
但是这里的2969/12/31该怎么填,如果按照内存地址2的格式填,那么就是 32 00 39 00 36 00 39 00 2F 00 31 00 32 00 2F 00 33 00 31 00
其中我将31改成了32,表示1969年份改成2969,最终应该是mov rax, 0x32003900360039002F00310032002F0033003100
但这么改好像不行,求指点。
rax要的是指针,所有调用rax的地方都会按指针来处理,你非要给个固定值,肯定不能得到想要的结果啊,把这个固定值写到某个地址,再把这个地址的指针赋给rax才是正确的做法,否则你就找到最终使用这个固定值的地方再看看怎么修改 细节看不懂时,我就用自创的区间定位法,搞你起源的地方影响下边的走向。
页:
[1]