扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
先摘抄一段简单介绍:
站在用户的角度思考问题,与客户深入沟通,找到福清网站设计与福清网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟主机、企业邮箱。业务覆盖福清地区。
安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。SecureShell,又可记为SSH,最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
在我理解就是类似Windows 系统上面的Telnet,但是SSH相对于Telnet的一个重要优势就是所有传输都是经过加密的。
在iOS中我们使用OpenSSH软件。
OpenSSH原是一个在Linux下很实用的一个软件。iPhone本身就是一个运行BSD系统(可认为是一种Liunx)的硬件,因此,Cydia的作者Saurik把OpenSSH这一软件移植到了iOS平台上,并且简化了安全认证密钥的繁琐,使之成为一款可以在iPhone上运行的Cydia插件。
在iOS的系统管理中,多半是使用命令行。在远程管理中,多半是用OpenSSH通过Wi-Fi或者3G来对iPhone、iPad、iPod Touch执行命令修改文件等操作。
OpenSSH用途是在PC或者Mac上远程输入命令操作iOS设备,免去使用MobileTerminal,同时,也是一种在多系统下管理iPhone、iPad系统文件的方法。
连接到iPhone后可以执行各种UNIX命令,比如文件操作,拷贝删除,等等很多用途。
如果没有配置SSH免密码连接,那么我们在连接SSH的时候就会提示输入密码,每次都要输入很麻烦,比如:
1,如果本人是做iOS开发的,项目用到了GIT版本控制,一般都配置SSH密钥了。密钥已经存在了电脑的./ssh目录中,如果没有配置,那么可手动重新生成SSH密钥,比如:
ssh-keygen -t rsa -b 4096 -C "zhangdasen@126.com"
2,生成完成后,我们会在./ssh目录中发现id_rsa.pub公钥这个文件。
然后我们把它copy出来放到个人目录下,并重命名,比如:
cp /Users/zhangdasen/.ssh/id_rsa.pub ~/authorized_keys
3,我们手动SSH进入设备中,或者通过PP助手进入设备中,查看是否存在var/root/.ssh目录,如果没有,我们手动创建下。可通过SSH连接后mkdir创建,或者PP助手连接后创建。
4,创建后我们把authorized_keys拷贝到设备中,可利用SCP命令:
scp ~/authorized_keys root@10.10.245.208:/var/root/.ssh
5,然后按正常我们就可以直接SSH连接的时候不用输入密码了,如图:
6,这个时候,如果我们使用tweak打包时候,也不会再让我们输入SSH密码了。
下一篇: iOS逆向工程(8) 一条命令砸壳(详细菜鸟版)
1.ptrace(process trace进程跟踪)
为了方便软件的开发和调试 ,UNIX早期版本就提供了一种对运行进程进行跟踪和控制的手段,那就是系统调用ptrace.通过ptrace可以实现对另一个进程实现调试和跟踪.同时,ptrace提供了一个非常有用的参数,那就是PT_DENY_ATTACH,这个参数用于告诉系统阻止调试器依附
我们创建一个mac项目 因为ptrace在iphone上不提供头文件
/*
* Copyright(c)2000-2005 Apple Computer,Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0(the 'License'). You may not use this file except in
* compliance with the License. The rights granted to you under the License
* may not be used to create,or enable the creation or redistribution of,
* unlawful or unlicensed copies of an Apple operating system,or to
* circumvent,violate,or enable the circumvention or violation of,any
* terms of an Apple operating system software license agreement.
*
* Please obtain a copy of the License at
* and read it before using this file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis,WITHOUT WARRANTY OF ANY KIND,EITHER
* EXPRESS OR IMPLIED,AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION,ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE,QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/* Copyright(c)1995 NeXT Computer,Inc. All Rights Reserved */
/*-
* Copyright(c)1984,1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms,with or without
* modification,are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice,this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice,this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California,Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT LIMITED TO,THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL,EXEMPLARY,OR CONSEQUENTIAL
* DAMAGES(INCLUDING,BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES;LOSS OF USE,DATA,OR PROFITS;OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN CONTRACT,STRICT
* LIABILITY,OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE)ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)ptrace.h 8.2(Berkeley)1/4/94
*/
#ifndef _SYS_PTRACE_H_
#define _SYS_PTRACE_H_
#include sys/appleapiopts.h
#include sys/cdefs.h
enum {
ePtAttachDeprecated __deprecated_enum_msg("PT_ATTACH is deprecated. See PT_ATTACHEXC")= 10
};
#define PT_TRACE_ME 0 /* child declares it's being traced */
#define PT_READ_I 1 /* read word in child's I space */
#define PT_READ_D 2 /* read word in child's D space */
#define PT_READ_U 3 /* read word in child's user structure */
#define PT_WRITE_I 4 /* write word in child's I space */
#define PT_WRITE_D 5 /* write word in child's D space */
#define PT_WRITE_U 6 /* write word in child's user structure */
#define PT_CONTINUE 7 /* continue the child */
#define PT_KILL 8 /* kill the child process */
#define PT_STEP 9 /* single step the child */
#define PT_ATTACH ePtAttachDeprecated /* trace some running process */
#define PT_DETACH 11 /* stop tracing a process */
#define PT_SIGEXC 12 /* signals as exceptions for current_proc */
#define PT_THUPDATE 13 /* signal for thread# */
#define PT_ATTACHEXC 14 /* attach to running process with signal exception */
#define PT_FORCEQUOTA 30 /* Enforce quota for root */
#define PT_DENY_ATTACH 31
#define PT_FIRSTMACH 32 /* for machine-specific requests */
__BEGIN_DECLS
int ptrace(int _request,pid_t _pid,caddr_t _addr,int _data);
__END_DECLS
#endif /* !_SYS_PTRACE_H_ */
2.写入函数
/**
arg1:ptrace要做的事情
arg2:要操作进程的ID
arg3(地址)\arg4(数据):取决于arg1
*/
ptrace(PT_DENY_ATTACH,0,0,0);
然后我们来Xcode调试发现进程断开了 这样就做到了防止调试
思考 :
我们首先思考下 ptrace是系统函数 我们hook系统函数的fishhook刚好可以解决这个问题 那么我们接下来我们hook这个ptrace这个函数
1).我们新建一个动态库
为了防止被其他人注入动态库hook我的函数 我可以自己注入动态库先调用ptarce
这里要注意一点
1)工程优先加载自己工程的动态库
2)然后加载注入的动态库 按照添加编译的顺序执行
3)最后加载我们的target 按照添加编译的顺序执行
按照这个原理我们就可以防止别人注入动态库
扣丁学堂完整iOS开发体系课程
C语言OC语言UI
高级课程蓝牙第三方登录广告植入
应用发布
前言:网上关于微信逆向的文章很多,而关于抖音的就相对较少,主要原因是在逆向Hopper分析的时候,里面大多是函数调用地址,不知道具体的方法直线,笔者研究了几天之后,有些小心得与各位分享.
逆向需求:实现评论功能,模拟不同的用户评论.
开发环境:脱过壳的抖音IPA(Aweme.app), Xcode(安装MonkeyDev), Hopper(解析执行文件), 导出抖音所有头文件
1运行MonkeyDev,查看抖音的层级结构,先找到评论的控制器 AWECommentListViewController
搜索头文件,看看里面有什么有用的属性,replyComment:这个可能是回复评论时候生成的模型,model:,listManager:可能是用来处理评论逻辑的,- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2:点击发送评论,这个应该是关键方法,随便发一条评论,在该方法下一个断点,进行验证
确实来到了这个方法,而且这个方法是由 AWECommentListInputView 这个View来调起的,猜想这个View应该是文本输入框的View,而且评论控制器实现了这个View的代理方法- (_Bool)commentInputViewShouldReturn:(id)arg1,代理方法里面调用了评论控制器的- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2方法, 所以理论上我们可以手动调用这个方法,能实现发送评论,
2在评论控制器添加一个按钮,按钮的点击事件设为- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2 这个方法,看是否能够评论成功,
验证评论可以发送成功,
3继续跟进方法调用,查看是哪个类来发送的评论请求,我们需要了解必须上送什么参数,以及请求路径. 打开Hopper 寻找突破口,搜索AWECommentListViewController userTappedSendWithContent,找到三个可疑的方法,点进去跟进
实现这三个方法,分别打入断点,运行Xcode,当发送一条评论时,会进到-sendCommentContent 这个方法,进到这个方法里面,看到一条有用信息
点进这个方法,发现一个熟悉的味道 AWECommentListManager,方法是属于它的,还记不记得在文章开始的那个listManager,就是它,惊不惊喜,还原成控制器的调用就是 [self.listManager commentWithContent: replyId: replySubCommentID: replySubCommentAuthorID: extraInfo: referString: completion:], 顺藤摸瓜,继续往下走,最终跟进到+(void)commentAwemeItemWithID:(void *)arg2 content:(void *)arg3 replyCommentID:(void *)arg4 replySubCommentID:(void *)arg5 extraInfo:(void *)arg6 sticker:(void *)arg7 referString:(void *)arg8 completion:(void *)arg9 这个方法之后,就无法再跟进了;于是转换思路,看看listManager里面会不会调用其他方法,我的做法是将里面的所有方法都打上断点,来到了_cmd 对应的这个方法,看到了传入的那个字典,aweme_id 是评论的id,就是你当前刷的这条抖音,text是我评论的内容,""是发送端口路径.
在调试过程中,我发现评论完的请求发送完成之后,又会发一个交易,通过
看到了一个关键词heartbeat,当我定在这个断点,会发现评论会失败,这应该是抖音的某种机制,这个心跳包如果不对,那么你的评论就会失效.
4思路:(1).发送评论肯定得知道用户的信息,比如userid,昵称,头像路径,这样才能区分是谁发的评论,找到这个";pass-region=0pass-route=0js_sdk_version=1.43.0.1webcast_sdk_version=1330app_name=awemevid=019C3DD5-08D3-49B6-AF5B-939154B6B148app_version=9.2.0language=zh-Hans-USdevice_id=40613784883channel=ppmcc_mnc=46011aid=1128effect_sdk_version=5.8.0screen_width=414openudid=02a6db71a7ae780f226b95032b116da6852f13e8webcast_language=zhos_api=18ac=WIFIos_version=12.4.6webcast_locale=zh-Hans_CNdevice_platform=iphonebuild_number=92013iid=110910203440device_type=iPhone%206%20Plusidfa=25D32F6D-CBC3-42E9-9A7C-2D72277497D4", 它是一个POST请求 请求参数 就是aweme_id=6812025407865425166channel_id=0text=%E4%BD%A0%E8%AF%B4%E7%9A%84%E5%AF%B9,这三个,接下来就得看请求头里面有没有我们需要的信息,只有iid=110910203440这个参数比较可疑,
5查看一下评论的模型信息,点进个人主页,查看userId的格式是怎么样的---待续...
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流