1. 微信防撤回

MustangYM/WeChatExtension-ForMac

1.1. 目录结构

1.1.1. 微信目录

$ tree /Applications/WeChat.app/ -L 3
/Applications/WeChat.app/
└── Contents
    ├── Frameworks
    │   ├── AFNetworking.framework
    │   ├── CocoaLumberjack.framework
    │   ├── JietuFramework.framework
    │   ├── MMLibHooks.framework
    │   ├── WCDB.framework
    │   └── matrixreport.framework
    ├── Info.plist
    ├── MacOS
    │   ├── WeChat
    │   ├── WeChatExtension.framework
    │   └── WeChat_backup
    ├── PkgInfo
    ├── PlugIns
    │   └── WeChatMacShare.appex
    ├── Resources
    │   ├── AppIcon.icns
    │   ├── Assets.car
    │   ├── Base.lproj
    │   ├── zh-Hans.lproj
    │   └── zh-Hant.lproj
    ├── _CodeSignature
    │   └── CodeResources
    └── _MASReceipt
        └── receipt
  • app_bundle_path : /Applications/WeChat.app/Contents/MacOS/
  • app_executable_path : /Applications/WeChat.app/Contents/MacOS/WeChat
  • app_executable_backup_path : /Applications/WeChat.app/Contents/MacOS/WeChat_backup
  • framework_path : /Applications/WeChat.app/Contents/MacOS/WeChatExtension.framework

1.1.2. 插件结构

$ tree /Users/snowdreams1006/Documents/workspace/WeChatExtension-ForMac-master/WeChatExtension/Rely - L 3
/Users/snowdreams1006/Documents/workspace/WeChatExtension-ForMac-master/WeChatExtension/Rely
├── Install.sh
├── Plugin
│   ├── WeChatExtension
│   │   ├── Update.sh
│   │   └── WeChatExtension.framework
│   │       ├── Resources
│   │       │   ├── Base.lproj
│   │       │   │   ├── TKAboutWindowController.nib
│   │       │   │   └── TKRemoteControlWindowController.nib
│   │       │   └── zh-Hant.lproj
│   │       │       ├── Localizable.strings
│   │       │       ├── TKAboutWindowController.nib
│   │       │       ├── TKAboutWindowController.strings
│   │       │       ├── TKRemoteControlWindowController.nib
│   │       │       └── TKRemoteControlWindowController.strings
│   │       ├── Versions
│   │       └── WeChatExtension
│   └── WeChatExtension.zip
├── Uninstall.sh
└── insert_dylib
  • WeChatExtension.framework : ./Plugin/WeChatExtension/WeChatExtension.framework
${shell_path}/insert_dylib --all-yes "${framework_path}/${framework_name}" "$app_executable_backup_path" "$app_executable_path"

1.2. install

#!/bin/bash

wechat_path="/Applications/WeChat.app"

if [ ! -d "$wechat_path" ]
then
wechat_path="/Applications/微信.app"
if [ ! -d "$wechat_path" ]
then
echo -e "\n\n应用程序文件夹中未发现微信,请检查微信是否有重命名或者移动路径位置"
exit
fi
fi

app_name="WeChat"
shell_path="$(dirname "$0")"
framework_name="WeChatExtension"
app_bundle_path="${wechat_path}/Contents/MacOS"
app_executable_path="${app_bundle_path}/${app_name}"
app_executable_backup_path="${app_executable_path}_backup"
framework_path="${app_bundle_path}/${framework_name}.framework"


# 对 WeChat 赋予权限
if [ ! -w "$wechat_path" ]
then
echo -e "\n\n为了将小助手写入微信, 请输入密码 : "
sudo chown -R $(whoami) "$wechat_path"
fi

# 判断是否已经存在备份文件 或者 是否强制覆盖安装
if [ ! -f "$app_executable_backup_path" ] || [ -n "$1" -a "$1" = "--force" ]
then
# 备份 WeChat 原始可执行文件
cp "$app_executable_path" "$app_executable_backup_path"
result="y"
else
read -t 150 -p "已安装微信小助手,是否覆盖?[y/n]:" result
fi

if [[ "$result" == 'y' ]]; then
    cp -r "${shell_path}/Plugin/WeChatExtension/${framework_name}.framework" ${app_bundle_path}
    ${shell_path}/insert_dylib --all-yes "${framework_path}/${framework_name}" "$app_executable_backup_path" "$app_executable_path"
fi

1.3. uninstall

# !/bin/bash

wechat_path="/Applications/WeChat.app"

if [ ! -d "$wechat_path" ]
then
wechat_path="/Applications/微信.app"
if [ ! -d "$wechat_path" ]
then
echo -e "\n\n应用程序文件夹中未发现微信,请检查微信是否有重命名或者移动路径位置"
exit
fi
fi

app_name="WeChat"
framework_name="WeChatExtension"
app_bundle_path="${wechat_path}/Contents/MacOS"
app_executable_path="${app_bundle_path}/${app_name}"
app_executable_backup_path="${app_executable_path}_backup"
framework_path="${app_bundle_path}/${framework_name}.framework"

# 备份WeChat原始可执行文件
if [ -f "$app_executable_backup_path" ]
then
rm "$app_executable_path"
rm -rf "$framework_path"
mv "$app_executable_backup_path" "$app_executable_path"

if [ -f "$app_executable_backup_path" ]
then
    echo "卸载失败,请到 /Applications/WeChat.app/Contents/MacOS 路径,删除 WeChatPlugin.framework、WeChat 两个文件文件,并将 WeChat_backup 重命名为 WeChat"
else
    echo "\n\t卸载成功, 重启微信生效!"
fi

else
echo "\n\t未发现微信小助手"
fi

1.4. 初识逆向工程

下面是在iOS逆向分析中使用到的一些工具,大家可以先看看了解下,在后面的课程中会给大家讲解一些工具的使用及其原理。

1.4.1. 一、砸壳工具:

1.4.2. 二、界面分析工具:

Reveal: https://revealapp.com/

1.4.3. 三、监控工具:

1.4.4. 四、静态分析工具

1.4.5. 五、动态调试工具

ldb: http://lldb.llvm.org/

1.4.6. 六、动态脚本工具

1.4.7. 七、抓包工具

1.4.8. 八、Mac工具

lipo , otool

1.5. 认识越狱设备

本节课中涉及Cydia里面的工具:

系统定制工具: Cloaky

命令行工具: adv-cmds

文件管理工具: iFile

1.5.1. 越狱环境配置

本节课涉及到的一些工具:

  • OpenSSH

  • usbmuxd

  • appsync

  • Apple File Conduit'2'

1.5.2. 一、OpenSSH安装使用

ssh root@ip

password:alpine

修改密码

passwd

passwd mobile

1.5.3. 二、免密码登录

ssh-keygen -t rsa -P ''
scp /Users/用户名/.ssh/id_rsa.pub root@Ip:/tmp
cat /tmp/id_rsa.pub >> .ssh/authorized_keys

1.5.4. 三、通过USB连接

下载地址: https://cgit.sukimashita.com/usbmuxd.git

usbmuxd-1.0.8

python tcprelay.py -t 22:2222
ssh root@localhost -p 2222
scp -P 2222 ./test.txt root@localhost:/tmp

1.5.5. 四、SSH中文

  1. 创建".inputrc"
set convert- meta off 
set meta-flag on
set output-meta on
  1. 导入文件到 var/root 下面

1.5.6. 五、key不匹配的问题

打开 /Users/monkey/.ssh/know_hosts 文件,删除对应 IPkey 即可。

1.5.7. 六、查看进程列表

ps aux | grep xXx

1.6. 快速SSH登入设备的方法

这里给大家安利一个快速快速SSH登录设备的方法。

  1. 切换到目最
cd /Users/monkey/.ssh  #monkey为当前用户名
  1. 如果没有 config 文件,新建一个。
touch config
  1. 编辑内容
Host 5c  #这个名称是自定义的设备名,自己定义一个就行
Hostname localhost  #我是通过USB端口映射,所以写localhost
User root  #以root用户登录
Port 2222  #指定端口号为映射的端口号 2222
IdentityFile /Users/monkey/.ssh/id_rsa #rsa key的路径
  1. 端口映射
python tcprelay.py 22:2222
  1. 一键登录
ssh 5c
  1. 设置启动时端口自动映射:

安装:

brew install libimobiledevice

创建文件:

-/Library/LaunchAgents/com.usbmux.iproxy.plist

写入内容:

<?xml version ="l.0" encoding ="UTF- -8"?><IDOCTYPE plist PUBLIC "-//Apple//DTD PLIST1.0//EN" "http://www.apple.com/DTDs/PropertyList-l.0.dtd">
<plist version="l.0">
    <dict>
        <key>Label</key>
        <string>com.usbmux.iproxy</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/iproxy</string>
            <string>2222</string>
            <string>22</string>
        </array>
        <key>RunAtLoad</key><true/>
        <key>KeepAlive</key><true/>
    </dict>
</plist>

执行命令:

launchctl load -/Library/LaunchAgents/com.usbmux.iproxy.plist
  1. 安装 iterm2 , 点击 Preferences ,然后点击 Profiles Commandssh 5c 以后只需要 Command + O ,打开对应的 Profile 即可。

1.7. App的结构与构建过程

示例运行方式:执行 make all,生成 ipa 文件

使用正确 Team ID

  1. 编辑 make 文件,在 plist 部分的 CFBundleldentifie 填写可用的 Team ID
  2. 编辑 entitlementsplist 文件,配置 Team ID

正确地签名:

  1. 编辑 make 文件,在 codesign 部分填写正确的开发名证书 ID
  2. 将包含 device IDprovision 的文件放到 make 文件同级目录;

itools: http://www.itools.cn/

1.7.1. 寻找控件背后的代码

lldb 打印页层级结构

po [UIApplteation abaredlpplication].keywindow.recursivaDeseription

获取 UIControlaction 的需要的方法:

allTargets
allControlEvents
actionsForTarget:forControlEvent:

1.7.2. 数据存储

获取沙盒目录:

//沙盒根目录
NSHomaDirectory()
//cache目录
NSSearchPathPorDirectoriesInDomainaNSCacheaDirectory, NSUsarDomainMaak, YES)

plst文件格式转换:

plutil -convert xnl1 plist_binary_file
或
pluti1 -convart pliat_binary_file -0 xx.plist

keychain信息导出工具:

Keychain-Dumper

iOs文件系统

httpe:fideveloper.apple.camdibrarylcontent/documentatian FileManagemenUCor/. htn

1.7.3. 类与方法

打印 instance size

p(int)class_getInstanceSize([AppDelegate class])

arm64 从 isa 获 class 的方法

p/x (Class)(isa_content &(long)_debag_1sa_elaas_mask)

http://imgkr.cn-bj.ufileos.com/6532a17d-a97d-4f75-bbdd-4184cf4bc153.png

作者: 雪之梦技术驿站
链接: https://snowdreams1006.github.io/other/anti-withdrawback-wechat.html
来源: 雪之梦技术驿站
本文原创发布于「雪之梦技术驿站」,转载请注明出处,谢谢合作!

https://snowdreams1006.github.io/snowdreams1006-wechat-open.png

© snowdreams1006 all right reserved,powered by Gitbook文件修订时间: 2020-09-05 22:33:58

results matching ""

    No results matching ""