一款看图软件的自动更新及弹窗广告代码分析
本帖最后由 eec 于 2021-6-11 15:57 编辑网上下载了个看图的软件,发现每隔一段时间会弹广告,且开机会启动。
一、禁用开机启动
直接windows自带查找开机启动项无果,直接360开机加速...
发现不开机启动了,那么解决(不过软件的极速预览图片功能就失效了)。
(PS:使用火绒剑查找启动项,搜索{“fastpic”也可以定位启动项,所有的都禁用即可)
二、Patch代码
直接把fastpic.exe拖到IDA,发现是VC2005编译,找到wWinMain,F5转伪C代码,代码有点长,那么先放一放。
在IDA搜索字符串“kminisite”(热点广告)、“update”(更新程序)等,发现均未找到符合的,选择动态调试。
拖到x32dbg,Ctrl+G定位CtreateProcessA和W函数并下断(后续发现调用的是W的,因此取消A断点)。
然后运行程序,发现并没有断下,打开火绒剑监测软件目录(我安装在“E:\Fastpic”目录下):
点击开始监控,打开软件,发现确实没有启动更新或广告程序。
猜测软件做了优化:应该检测了系统时间,一个时间周期内仅第一次打开才执行,那么我们修改下系统时间到明天,再次拖到x32dbg运行。
这次成功断下,调用堆栈切至上层函数依次查看,可以发现 启动更新、广告程序和相关启动参数 的逻辑代码。
记住地址,去IDA中转到相应地址,按F5转伪C代码进行分析。
追随调用堆栈找到了疑似关键跳,然后Patch掉软件中启动进程调用函数看看(在sub_4CC94A函数内patch也是可以的):
那么来看下sub_4CC94A函数大概干了什么:
BOOL __cdecl sub_4CC94A(int a1)//根据push 1得知,a1变量为1
{
//省略无关代码...
int v13; // BYREF
//省略无关代码...
if ( a1 ){
v13 = 0;
//时间相关运算代码...
v13 = (int)((v2 + v12) * 24.0);
if ( (double)v13 < 1.0 ) return 0;//疑似为:如果和上次启动软件时间间隔小于1天,就直接返回。
}
sub_4CC86A();//此函数拼接启动参数,然后启动更新、广告等程序(CreateProcessW)
Filename = 0;
memset(v17, 0, sizeof(v17));
GetModuleFileNameW(0, &Filename, 0x104u);
PathRemoveFileSpecW(&Filename);
PathAppendW(&Filename, &off_6D2290);
if ( !PathFileExistsW(&Filename) )
return 0;
std::wstring::wstring(v14, &Filename);
v18 = 0;
std::wstring::append(v14, L" /from:17 /fast");
if ( !a1 )
std::wstring::append(v14, L" /manual");
sub_50B17D();
v4 = time32(0);
sub_509BBD(v4);
v5 = lpCommandLine;
if ( lpCommandLine < (LPWSTR)8 )
v5 = (WCHAR *)lpCommandLine;
v6 = sub_4CBA17(v5);
v18 = -1;
v7 = v6;
std::wstring::~wstring(v14);
return v7;}
所以patch代码如下:
...
.text:0040AB86 push 1
.text:0040AB88 call sub_4CC94A //选择直接nop掉,懒得改内部代码。。
.text:0040AB8D pop ecx
...
修改为:
...
.text:0040AB86 push 1
.text:0040AB88 nop nop nop nop nop
.text:0040AB8D pop ecx
...
然后测试一下,发现运行正常,更新及广告代码移除成功。
(第一次发帖,内容比较简单,请大佬见谅) 本帖最后由 eec 于 2021-6-14 19:16 编辑
hjk 发表于 2021-6-13 20:50
这个帮我看下@eec
爱奇艺视频播放器
版本:8.3.132.2838类型:网络电视
一样下断CreateProcessW,然后你能发现:
07E1FCB0 75F055C1/CALL 到 CreateProcessW 来自 shell32.75F055BB
07E1FCB4 067E08CC|ModuleFileName = "C:\Users\...\AppData\Roaming\IQIYI Video\GeePlayer\GpUpdate.exe"
07E1FCB8 040BE1B8|CommandLine = "C:\Users\...\AppData\Roaming\IQIYI Video\GeePlayer\GpUpdate.exe" initiative"
剩下不用我说了吧。。 eec 发表于 2021-6-14 19:15
一样下断CreateProcessW,然后你能发现:
07E1FCB0 75F055C1/CALL 到 Create ...
下断CreateProcessW 后,这段代码怎么得到?
07E1FCB0 75F055C1/CALL 到 CreateProcessW 来自 shell32.75F055BB
07E1FCB4 067E08CC|ModuleFileName = "C:\Users\...\AppData\Roaming\IQIYI Video\GeePlayer\GpUpdate.exe"
07E1FCB8 040BE1B8|CommandLine = "C:\Users\...\AppData\Roaming\IQIYI Video\GeePlayer\GpUpdate.exe" initiative"
怎么处理?和上面讲的不一样? 谢谢分享,学到了 老板不提供下载吗 sqzh 发表于 2021-6-11 16:26
老板不提供下载吗
腾讯软件中心有原版:https://dl.softmgr.qq.com/original/Picture/Fastpic_Setup_69_1_20210427.exe,可自行下载对软件进行分析。 谢谢分享,学到了{:301_997:}{:301_997:} 2345看图也一个鬼样 可以考虑从系统中不给广告程序权限 读的权限都不给来解决 IDA的版本?转化为 伪C代码 感谢分享 6666666666666666 感谢分享