首页
论坛
课程
招聘
Frida HOOK SO 这种类型的值如何输出std::string *message
2021-9-29 18:47 16325

Frida HOOK SO 这种类型的值如何输出std::string *message

2021-9-29 18:47
16325

想要看下 输入值,std::string *message
这个message 一直不能输出
Memory.readCString 输出就是方法
hexdump 输出看不懂的东西,看着不像加密的


【公告】看雪招聘大学实习生!看雪20年安全圈的口碑,助你快速成长!

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 53
活跃值: 活跃值 (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chmlqw 活跃值 2021-10-8 09:02
2
2
std::string 本质上是一个结构体,不同stl版本实现不一样。需要根据实际情况读取。下面是我常遇到的
struct std::string
{
  char buffer[0x10];        // 如果字符串小于0x10就会存放这里
  int end;                                //结束的位置
  int start;                        //字符串开始的位置
};

struct std::string                        
{
  char *pData;
  int tmp[3];
  int size;
  int capacity;
};

struct std::string
{
    char *pData;
}
雪    币: 1454
活跃值: 活跃值 (4390)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
至尊小仙侠 活跃值 2021-10-8 18:18
3
0
楼上正解 对着结构体前四个地址找就完了 大概率data地址就在 前四个地址中  一眼就能看出来 有时候
雪    币: 179
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_hgrbqfun 活跃值 2021-10-8 21:32
4
0

去分析std::string 里面的char*的偏移地址。

一般来说操作std::string 的时候编译后的代码是去操作char*的地址,你这样去找:去在反汇编里面去寻找这个std::string 的操作,就能大概找到char*的偏移地址。


比如某个地方在对std::string 读值,那么编译后的汇编一眼就能看到真正的char*偏移。

最后于 2021-10-8 21:34 被mb_hgrbqfun编辑 ,原因:
雪    币: 1374
活跃值: 活跃值 (1421)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
lanoche 活跃值 2021-10-9 11:00
5
1
https://mp.weixin.qq.com/s?__biz=MzU1ODkwMTY4OA==&mid=2247483803&idx=1&sn=0d7c81df9f2298c98c6851d54cdf3d71&chksm=fc1e314ccb69b85ac62e0587afae421a2229c60a97ed70194058c29d4aac026dbab3cf50bc9b&token=2034269482&lang=zh_CN#rd
可以看下这个
雪    币: 3
活跃值: 活跃值 (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuxucau 活跃值 2021-10-9 18:03
6
1
较长字符串和较短字符串内存分布是不一样的,要进行一下判断,下面是从某位大佬那里学来的:
function readStdString(str){
    const isTiny = (str.readU8() & 1) == 0;
    if(isTiny){
        return str.add(1).readUtf8String();
    }
    return str.add(2*Process.pointerSize).readPointer().readUtf8String();
}
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
万里星河 活跃值 2021-10-10 17:12
7
0
Memory.readCString是针对c风格字符串 std::string准确来说是cpp的一个类 定义在标准模版库中 需要根据类的结构再做进一步解析 不能简单地read
雪    币: 0
活跃值: 活跃值 (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bulecheng 活跃值 2022-2-18 14:46
8
0
chmlqw std::string 本质上是一个结构体,不同stl版本实现不一样。需要根据实际情况读取。下面是我常遇到的 struct std::string { char buffer[0x10]; ...
大佬说的太有帮助了,我用readStdString这个函数可以打印指针_print(std::string *str), 用复分析结构的方法打印了引用_print(std::string &str)
雪    币: 74
活跃值: 活跃值 (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
alazif 活跃值 2022-2-18 16:05
9
0
你可以找app内的c_str()函数,然后把你的对象作为this指针参数去调用,得到的就是正常的char*了
游客
登录 | 注册 方可回帖
返回