▒ 目录 ▒
🛫 导读
需求
开发环境
1️⃣ 分析思路
思路
获取资源路径的方法
2️⃣ c++正向编码
编码
Mydll g_dll;
Mydll::Mydll()
{
char *res = ":/new/prefix1/logo.ico";
QString localname = QString("D") + res;
QPixmap icon(res);
icon.save(localname);
return;
}
使用流程
不使用Qt方式获取思路
3️⃣ frida方式获取Origin平台资源
win32 - 定位目标资源
win32 - 查找API含义
win32 - 查找《符号》构造frida本地函数
var fnQPixmap_QPixmap2 = new NativeFunction(
Module.findExportByName('qt5gui.dll', '??0QPixmap@@QAE@ABVQString@@PBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z'),
'pointer',
['pointer', 'pointer', 'pointer', 'int'],
'thiscall'
);
var oQPixmap = Memory.alloc(400);
var qStrPointer = ez_fnQString_fromUtf8(':/origin.png')
fnQPixmap_QPixmap2(oQPixmap, qStrPointer, ptr(0), 0)
win32 - 全部代码
var fnQString_fromUtf8 = new NativeFunction(
Module.findExportByName('Qt5Core.dll', '?fromUtf8@QString@@SA?AV1@PBDH@Z'),
'void',
['pointer','pointer', 'int'],
'mscdecl'
);
function ez_fnQString_fromUtf8(jsStr){
var retQString = Memory.alloc(Process.pointerSize);
var cStrPointer = Memory.allocUtf8String(jsStr);
fnQString_fromUtf8(retQString, cStrPointer, -1);
return retQString;
}
var fnQPixmap_QPixmap = new NativeFunction(
Module.findExportByName('qt5gui.dll', '??0QPixmap@@QAE@QBQBD@Z'),
'pointer',
['pointer', 'pointer'],
'thiscall'
);
var fnQPixmap_QPixmap2 = new NativeFunction(
Module.findExportByName('qt5gui.dll', '??0QPixmap@@QAE@ABVQString@@PBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z'),
'pointer',
['pointer', 'pointer', 'pointer', 'int'],
'thiscall'
);
var fnQPixmap_save = new NativeFunction(
Module.findExportByName('qt5gui.dll', '?save@QPixmap@@QBE_NABVQString@@PBDH@Z'),
'void',
['pointer', 'pointer', 'pointer', 'int'],
'thiscall'
);
function ezSave(uri) {
var oQPixmap = Memory.alloc(400);
var qStrPointer = ez_fnQString_fromUtf8(':/origin.png')
console.log('1111111111111111')
fnQPixmap_QPixmap2(oQPixmap, qStrPointer, ptr(0), 0)
console.log('2222222222')
var savePath = ez_fnQString_fromUtf8('D:\\origin.png')
console.log('33333333')
fnQPixmap_save(oQPixmap, savePath, ptr(0), -1)
console.log('444444444444')
}
ezSave(':/origin.png')
win64 - TODO
🛬 文章小结
📖 参考资料
- github源码 https://github.com/ninecents/MyOpen
- [Qt] 00_Qt资源解析 https://bbs.pediy.com/thread-250691.htm
- 代码注入下载地址 https://download.csdn.net/download/kinghzking/87254853
- Qt官网文档 https://doc.qt.io/Qt-5/qpixmap.html
- frida官网文档 https://frida.re/docs/javascript-api/#nativefunction