SendMessage WM_COPYDATA 拒绝错误

背景

SendMessage WM_COPYDATA 我们经常用来进程通信,今天突然改了一下代码加载方式,突然发现消息无法通信,我不断的通过打印日志来确定问题,最终觉得自己代码没有问题,但就是无法发送消息到另外一个进程。突然想到GetLastError() 看一下有什么错误,通过打印发现出现错误5,然后通过vs 带的错误查询,发现是拒绝错误。

解决方案

通过GetLastError, 我的脑海大概猜测是权限问题,于是搜索SendMessage WM_COPYDATA 拒绝错误,然后我找到这篇 https://blog.csdn.net/aa1991/article/details/19504557 ,固然验证是权限问题。如果是按照文章调用 ChangeWindowMessageFilter(WM_COPYDATA, 1); 就可以了

总结

排错需要更加系统化,尽可能了解不同知识点,更重要是思考方式,学会不断调节

PE加载器,DLL内存加载器

背景

我最近研究了DLL内存加载,网上找了好久代码,基本的原理差不多,自己稍微总结一下。

逻辑

  • 内存读取PE,按照PE格式进行加载(任何一本介绍PE的书籍都可以看有关知识)
  • 修复重定位表(这点非常重要,我开始不明白他怎么修复定位表)
  • 修复定位表
  • 其他细节(tls回调,修改PEB)
  • 调用入口启动

疑惑

1:怎么执行代码?

我们创建内存,然后复制PE到内存中,然后直接调用,但一些变量地址或者函数地址是以va(虚拟地址)直接访问,这些地址固定死的,但加载内存时候,基本不可能是原来的基地址,那么这些地址就是错误地址。那么这些地址要被修改,所以正常加载DLL或者EXE(正常启动EXE基本地址不会变化),如果模块的基地址变化都需要修改地址不然会崩溃。那重定位表记录原来硬编码的地址,我们遍历所有地址修复就修改掉。

2;兼容性

因为毕竟是我们人工模拟加载,那么可能缺失很多环境,导致异常。程序异常退出,这种只能通过OD动态调试分析,然后结合进程,线程有关知识来进行分析。最快就拿别人开源代码跑,因为这种都是经验,如果对这块没有研究,突然去研究感觉有点懵。

代码

1:一份简单代码

2:一份比较稳定,代码非常漂亮

https://github.com/polycone/pe-loader

可以加载MFC,代码优美,多了PEB修复,TLS回调等,只能启动标准的PE,不支持c#.可以正常启动酷我。酷狗启动不了,网易云音乐可以,QQ可以启动但看进程明显自动创建进程来实现。PC微信可以。整体看稳定系还是非常高,而且如果我们自己用,被启动程序我们也可以改,来适配稳定系。

加载DLL

加载DLL比EXE简单一些,不用修复PEB,我暂时没有测试DLL,但应该差不多。

作用

这个看每个人用途,这个技术和android插件技术类似,android多开就是插件技术,稳定性就要看模拟的程度了,这样子技术需要大量的用户测试反馈来排除一些坑。

备注

1:我本想顺着分析loadlibray,发现对于我非内核开发或者非专门逆向分析来说有点难,这种需要经验分析,有一些书籍有涉及,但比较少。

2:大量这几天查看和阅读大量知道PE加载器的核心知识点。

3:找相关代码 google : pe loader github 就可以找到很多代码。

贴边程序思路

我们有时候需要实现贴边qq或者微信窗口或者其他窗口的功能,最近研究了一下,大概2个思路。

  • 直接用 GetForegroundWindow ,获取当前前台的窗口句柄,然后获取是否自己想贴边的程序,可以通过类名或者窗口标题和进程名来判断
  • 通过窗口钩子,捕捉窗口移动的消息和一些其他消息来处理

我选择的第一种方式,因为实现起来最简单,启动一个定时器不停检测当前窗口就可以了,如果用钩子,可能被杀毒软件报警,同时代码复杂度会偏高。

免费图片分享外链地址(图床)

背景

我们经常可能要贴一些图片,如果自己没有服务器或者服务器流量又比较少,这个时候我们可以用免费提供图片图床服务

  • 路过图床(https://imgchr.com/), 目前自己使用没有发现特别问题,同时提供Html和markdown代码,自己直接复制即可,用户体验还不错
  • 聚合图床(https://www.superbed.cn/),这个目前自己还没有用过
  • 获取新浪短连接简单方法(非API)

    目前新浪短链接的API无法使用,因为新浪直接已经下架了API,那么之前网上直接调用新浪的方案都没有用了,我猜测原因大概是用的人太多,对新浪又没有什么收益,反而会影响
    新浪微博的短链接使用,于是直接下线了,但我们经常也还是会用到短连接,那么网上能用基本都是收费的,免费能用几次,自己还担心他们加了跳转,于是有了这篇文章

    新浪短连接解决方法详解

  • 登录新浪微博
  • 发布一条微博仅仅对自己可见
  • 发布的结果里面含有网页链接,直接复制即可
  • 网上提供收费估计类似的方案实现,因为只有使用官网的方式才会稳定,因为操作是非常简单的,所以我就不截图了,之前用python写了一套可以生成短链接了,后面新浪改了规则,现在用不了了,有时间看能不能自己写一套自己用

    微信快速登录工具开源下载

    功能

    快速切换已经登录过的微信,如果没有登录过是没有快速切换

    效果图

    下载地址

    百度网盘(提取:htir)

    源码

    https://github.com/xvsdf100/WxQuickLoginTool

    原理

    字节解析:

    第一字节代表类型,第二字代表大小(可能用2个字节表示),第三个字节代表KEY(如果size用2个字节,那么Key就变成第4个字节),基本逻辑就是这么简单,自己用二进制工具看,结合逻辑,然后稍微分析大概就能得出来。

    微信切换逻辑

    • 先找到微信通用配置目录,通过在公共目录%USERPROFILE%\AppData\Roaming\Tencent\WeChat\All Users\config\3ebffe94.ini
    • 获取到微信配置目录,然后读取公共配置
    • 修改公共配置当前登陆过微信就可以快速登录

    c# md5 在某些电脑报错

    此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。我们能从网上能找到基本是这个错误,一个c# 系统API竟然会报错,然后根据网上修改APP.config关闭FIP算法是无效,不用再试了。然后修改注册表:

    在window中打开功能里输入regedit,回车打开注册器。然后进入如下路径中

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy   将enable设置为0 即可。

    修改之后要重新启动电脑。

    虽然上面这个可以解决问题,但用户电脑不可能要用户修改,后面通过从github找一个份MD5 实现代码来替换系统API的MD5,写这篇文章的意思,大家还是不要用c# md5,如果别人电脑开启fips就报异常,虽然这个配置默认关闭的,但可能个别用户是打开的。

    网址爆红怎么恢复

    自己以前买了一个域名,后来各种原因360和qq报红,我后来就没有用那个网址了,直接放在那里,自己想重新拿来用。于是我直接qq和360申请,竟然直接通过了,看来也没有网上说那么难,需要交钱才可以恢复。

    网址情况说明

    我那个网址放了2年,基本什么内容都没有指,直接申请,内容就是简单正常网站,没有任何违规内容。

    百度301跳转报可能被黑客恶意修改

    因为最近自己更换了域名,通过301跳转到新的域名上面,这样子不会影响搜索引擎以前收录,结果我操作了一下,然后搜索关键词提示原来的网址报恶意修改,google搜索引擎已经替换新的域名了,这样子我只能申请恢复,还好百度反馈很快,申请一会就收到通过审核,过几个小时搜索引擎就恢复正常!

    原因

    • 国内环境太差。好多网站安全意识太差,导致很多网站被恶意篡改掉了。所以百度搜索引擎对30x跳转比较敏感,不过这样子对一些真正需要跳转的网站不是那么好,貌似也会突然降低网站的权重。
    • 301跳转的网址部分没有改成新的,导致百度被恶意修改了,因为之前后台写的绝对地址,没有写相对地址,我觉得百度可以加一个内容比对,如果跳转的地址,内容没有发送特别变化,不应该出现提示,这个地方我认为可以稍微优化一下。