吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1449|回复: 2
上一主题 下一主题
收起左侧

[第二课] 来写一下学习PJ的心得 第二课

[复制链接]
跳转到指定楼层
楼主
a621460 发表于 2023-8-20 05:33 回帖奖励
我发第一课的时候有人说我用小号顶 我自己的贴子 其实我就只是想写给自己看的  第一个作为一个 自己学习的记录  第二呢 这个教程是很早就发的 现在去咨询大佬  第一 已经过去很久了  第二也不能确定 大佬是否有空  
发这个贴子  也是想  一个是自己能看看  做一个学习经验 记录  发现问题 解决问题  其次  如果有人跟我有一样的问题 或者类似的问题  也可以  一起学习交流    我不需要什么 热心 或者什么B之类的 真不用顶  也可以不回复 除非有需要问题或者 确实帮助到你本人了 对你有帮助 帮助到你了  
在一个 我学这个  只是想吧曾经 想做的事情  现在执行下去  正好现在没上班  学点东西 也没有什么不好   虽然不知道能学多久 或者学到哪里   
本来想 23 一起发的  结果2课 脱壳 回顾第一课的时候 发现不少问题 而且 后续也出现了很多问题  自己研究 处理问题 花了很久 很long tima
  在一个  这个课程是的确需要一些底子的     比如 汇编   正向写线程的   比如为什么要断 哪些api  因为 你不管用什么 比如易语言 写 弹窗 都是需要用到那些个api 的  哪怕你是易语言  也是需要用到 api 的 可能你用的模块 只不过它把api写在模块里了 你看不见而已  你不用模块写的试试

吐槽一下   就是有几个需要等待的 比如弹窗等待 或者提示框等待 有点 头疼  不是很想等

笔记1    就是定位  api函数 然后找到上层地址 nop  代码  或者 ret函数   
  这个比较简单  需要知道一点汇编基础  比如汇编平衡之类的     
  以下部分是为完全不懂的小白讲解的 也是自己的一个理解方式方法    如果您会  可以跳过   
  首先说一下 call   和push   push  是把 push 的参数 给到call 里面   call 里面 在OD 右下角  括号  有几个参数 那么就在外面一定有几个 push     因为 这是一个函数
比如  一个函数 让你去吃西瓜    你需要一个瓜  并且 你需要知道瓜的大小 参数  你怎么拿 怎么吃  用哪个嘴吃  给谁吃   call  可以理解为 吃这个动作   而 瓜的大小 以及后后续说明 需要push   可以正向理解 或者逆向理解  

ret     就是执行完毕  反汇到上一个压栈   压栈就是   右下角  call 进来以后 会传入 之前call 地址的下一段代码的地址   ret 是可以有参数的 ret 0*4 或者ret 0*8  
  无参call 的ret  比方  比如 要你去巡逻     这个call 要你 看房间   不需要你汇报  只需要你进去转一圈  这种call  是没有传参的  这种call  可以直接进入call 内部 的第一句代码 ret      
  有参call 的ret 比方     依旧要你去巡逻   这个call  要你看房间   但是需要你汇报 有多少家具   你进去转一圈   然后汇报有多少家具   这种call  是有传参的  需要ret 0*4  之类的   
  上面理解了  请在理解这里  为了避免 不严谨        无参call  也是有回执的   回执在eax  rax 里面   只不过 一般情况 这个 数据参数 不重要   忽略即可     04 就是按照   寄存器顺序依次  ax  bx  cx  dx /  64  则是 rax  rdx   然后是 什么+8 +c 好像 这个有点忘了  
  回执传参  数据重不重要呢  这个得看 call 内部   你想应付领导 你也不可能做一个 太离谱的数据把  参数数据 一定得是合理范围内的   别把 0-255范围的参数  你弄一个 longlong 的数据出来  会崩的

笔记就暂时就这些  但是问题 就有几个      如果您是大佬 正好在看这个贴子  并且您正好会  可以麻烦请您讲解一下 谢谢  

第一个  aps 脱壳      手托以后 是这个样子的   




然后 就在这里 直接 走了脱壳流程  然后  软件竟然打开了?  很吃惊




标识 Unknown Packer-Protector  我不确定 这个是否还存在壳   
这里我相信 不止我一个人有这种问题   前提是你得单步单脱  


第二个问题  就是小窗口的     按照视频流程走  没问题 但是我有一个想法  能不能用 压栈里面找到 上层  dbox的函数地址  



这里呢  我是2个都下过断  是先运行的 dbox 的创建窗口  然后运行的 通关中文搜索找到的 文字这个地方 但是中介 隔了 有一点久   我在压栈里面 翻到底了 才找到  1BD0 压栈 而且 我也不知道 这个方法 可不可行   因为我觉得这2个应该是挨在一起的  所以应该距离比较近  
这个只是一个尝试 如果有大佬有其他 方式方法 或者 除了在 已知API 在已知API 里面下段的方法    有没有别的办法 比如通过 已知可以视觉看到的参数 去找未知API  
  可能有点天方夜谭 不可理喻  只是一个想法  我个人能力有限  有会的大佬 请教一下  谢谢  


第三个问题 跟第二个类似   



依旧按照视频的方法 确实可以达到 想要的效果   
那么 我又有一个萌生的想法   那就是 能不能通过  这个网页的地址 倒推 这个 内嵌窗口的call   直接  ret 或者 nop  这个网页窗口 直接让他不创建 行不行     
我有试过 拦截 绘制窗口的函数  我不确定是我不了解这个函数 函数 还是我找错了  函数名字 我忘了  也没有保存  但是我可以记得 是在 下段以后的 运行的第三次 就开始现实的这个网页窗口   
如果有大佬知道函数 或者其他方法  麻烦请教一下  谢谢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
爱飞的猫 发表于 2024-3-3 21:11
本帖最后由 爱飞的猫 于 2024-3-3 21:12 编辑

标识 Unknown Packer-Protector  我不确定 这个是否还存在壳
这里我相信 不止我一个人有这种问题   前提是你得单步单脱  

手拖是会这样,因为壳的数据还在。如果你能精准剔除这些数据,应该就不会报告未知壳了。

压缩壳之类的壳将代码区段压缩后的内容的熵值很高,有可能是因为这个原因报告的。

这里呢  我是2个都下过断  是先运行的 dbox 的创建窗口  然后运行的 通关中文搜索找到的 文字这个地方 但是中介 隔了 有一点久   我在压栈里面 翻到底了 才找到  1BD0 压栈 而且 我也不知道 这个方法 可不可行   因为我觉得这2个应该是挨在一起的  所以应该距离比较近  

DialogBoxParam 函数有一个参数是 lpDialogFunc,OD 里显示的是 DlgProc。通常窗口建立后的初始化代码会在这里处理(例如 WM_INITDIALOG 事件)。

不过这整个方法都是右下角弹窗的窗口处理事件,如果需要完美去除的话需要找到在哪建立这个窗口。

对着你找到的这个函数进行分析,一路回溯 + 查找引用,可以看到这样的内容:

int __thiscall sub_401C00(LPARAM *this)
{
  char v3[16]; // [esp+4h] [ebp-10h] BYREF

  CDialog::OnInitDialog(this);
  dlg_set_icon__401f30(this, this[75], 1);
  dlg_set_icon__401f30(this, this[75], 0);

  dlg_set_url_4017D0((this + 46), L"http://www.52pojie.cn/portal.php", v3, v3, v3, v3);// 设置窗体的 IE 控件地址
  proc_elevate_SeDebugPrivilege_401910();       // 提权到调试权限
  proc_set_homepage__4019D0();                  // 改首页

  CreateThread(0, 0, sub_401BD0, 0, 0, 0);      // 在新的线程内处理弹窗
  return 1;
}

其中对 CreateThread 接口的调用就是建立线程。

这个线程启动后会等待 20s 然后建立“广告弹窗”窗口:

void __stdcall sub_401BD0()
{
  HMODULE hModule; // eax

  Sleep(20000u);                                // 等待 20 秒

  hModule = GetModuleHandleW(NULL);
  DialogBoxParamW(hModule, 0x84, NULL, DialogFunc__401B00, NULL);
}

那么 我又有一个萌生的想法   那就是 能不能通过  这个网页的地址 倒推 这个 内嵌窗口的call   直接  ret 或者 nop  这个网页窗口 直接让他不创建 行不行     

嵌入控件到窗口一般有两个方法,一个是在 EXE 资源里面添加,随着窗口建立由 Windows 的系统组件来建立对应的控件;或是窗口建立后手动调用 CreateWindowExW(或 CreateWindowExA)来建立。前者可以用使用 Resource Hacker 之类的工具直接编辑,后者找到对应的 CALL 将其屏蔽(记得对其堆栈)并替换返回值为 EAX (或 RAX,如果是 64 位)为 0 避免意外更改其它控件(因为返回值 0 代表窗口控件建立失败)。

这个课件是前者,因此教程视频是直接将其改成了不可见的状态然后把对应的导航方法导航到空的网址。你如果 NOP 处理掉这个 CALL,就会变成默认的无网页的状态。

_00401C58:
  add esp, 14 ; 平衡堆栈
  or eax, eax ; 随便找个 2 字节长度的 NOP 替代

截图

3#
adgjm22 发表于 2024-3-14 21:13
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-21 21:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表