- iOS远程真机之iTunes与iPhone的通信协议usbmuxd解析
fswy
#iOS远程真机itunesiphone通信tcpusbmuxd
最开始研究与iPhone通信,都会想当然的google下usb协议,必经iphone是通过usb线连接到电脑.其实不然,iTunes是通过TCP协议与iPhone通信的usbmuxdiTunes使用一种叫”usbmux”的东西与iphone通信,这个东西提供了一个USB-TCP的转换服务.这个服务在Mac端是由/System/Library/PrivateFrameworks/MobileDevi
- usbmuxd通过交叉编译移植到Android上(一)
VendorLinux
androidjavaapache
1、gitclonehttp://git.libimobiledevice.org/usbmuxd.git2、配置好ubuntu下ndk编译环境,配置好以后执行ndk-build会有如下的打印,证明配置ndk编译环境正确。3、编写.mk,在根目录下mkdir-pandroid/jni并创建如下:4、编译依赖库如下,需要自己一一整理编译,后续章节会持续更新如何一一编译如下依赖库include$(CL
- usbmuxd通过交叉编译移植到Android上(三)之libusb1.0
VendorLinux
androidjavaapache
代码获取:1、gitclonehttp://git.libimobiledevice.org/libusb.git2、libusb:libusbforandroid-Gitee.com简介:libusb是一个开源库,允许从userspace与USB外备直接通信,而不需要编写内核驱动。适合于应用程序开发人员使用。支持USB1.0~3.1协议,支持Linux,macOS,Windows(Vistaan
- 借助ios-webkit-debug-proxy,使用Chrome DevTool调试iOS设备的webView
HelloWorld__
1iOSWebKitDebugProxyios_webkit_debug_proxy(又名iwdp)通过websocket连接代理来自usbmuxd守护进程的请求,允许开发人员在真实和模拟的iOS设备上向MobileSafari和UIWebViews发送命令。appium依赖此工具进行webview控件的操作github:https://github.com/google/ios-webkit-d
- iOS 逆向相关
zcz19911
工具:Reveal,snoop-it(监测工具)反汇编工具:IDA/Hopper调试工具:LLDB开发工具:Theos/iOSOpenDevTheos安装HowBrew安装dpkg和LDID安装usbmuxd安装自带iproxy苹果安全文档(中文):https://www.apple.com/cn/business/resources/docs/iOS_Security_Guide.pdfcycr
- iproxy-通过USB使用SSH连接iOS设备
曾柏超
brewinstallusbmuxd安装usbmuxd库之后,就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口,例如:iproxy222222
- 通过ssh连接到越狱iPhone
i爱吃土豆的猫
安装usbmuxdbrewinstallusbmuxd安装usbmuxd库之后,就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口映射端口iproxy222222以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的2222端口,那么想和设备22端口通信,直接和本地的2222端口通信就可以了。macdeMacBook-Pro:~mac$iproxy2222
- lldb连接越狱设备的步骤
禾口王No_1
iproxy222222新开一个窗口2ssh-p2222root@localhost在窗口2debugserver*:1234-a"WeChat"新开窗口3cd/Users/mac/Desktop/usbmuxd-1.0.8/python-client在窗口3./tcprelay.py-t1234:1234新开窗口4lldb在窗口4processconnectconnect://172.19.18
- tidevice wda ios 自动化
西北孤狼一号
ios自动化python
一、测试架构介绍通信原理图手机端的WDARunner(WebDriverAgent)类似于appium测试框架中的UIAutomatorServer,将从客户端接收到的控制命令转换为XCUITest相关API操作,实现对应用界面的控制。WebDriverAgent应用需要通过xcode编译安装。usbmuxd是苹果提供的一个服务,用于USB和TCP协议之间的转换,实现在没有网络的情况下也可以连接设
- Flutter真机调试弹框报错 无法打开“iproxy”,因为无法验证开发者
DerekTime
Flutter真机调试弹框报错无法打开“iproxy”,因为无法验证开发者终端执行sudoxattr-dcom.apple.quarantine~/.fvm/default/bin/cache/artifacts/usbmuxd/iproxy~/.fvm/default为自己FlutterSDK安装的目录
- SSH连接越狱手机
打碟的DJ
SSH连接越狱手机一、在越狱iPhone上使用Cydia安装OpenSSH20220104114003.jpg二、利用OpenSSH连接iPhone1、通过usb连接通过brew来安装usbmuxd,终端输入以下命令安装usbmuxd:brewinstallusbmuxdusbmuxd自带工具iproxy,iproxy可以快捷连接iPhone操作。由于Mac上只支持4位的端口号,所以需要把iPho
- 简聊 mac 和 ios设备通信 (usbmuxd & service & bplist)
pipa
概念:usbmux:mac端和Ios设备通信的大门lockdown:ios端和外部通信的大门mac和ios通信其实就是usbmux和lockdown通信现在市面上基于usbmuxd协议软件已经有很多,比如通过三方软件读取ios设备相册,安装、卸载软件,peertalk等,大部分通信协议为plist。流程为:macusbmuxdioslockdowndserviceios-webkit-debug-
- [facebook-wda]搭建iOS App自动化环境
LL-Dynabook
ios
搭建iOSApp自动化环境一、测试结构介绍手机端的WDARunner(WebDriverAgent)类似于appium测试框架中的UIAutomatorServer,将从客户端接收到的控制命令转换为XCUITest相关API操作,实现对应用界面的控制。WebDriverAgent应用需要通过xcode编译安装。usbmuxd是苹果提供的一个服务,用于USB和TCP协议之间的转换,实现在没有网络的情
- 通过Alfred+shell自动清除ssh记录
YxYYxY
由于工作中需要使用到很多部越狱手机,每部手机都需要ssh链接,而且都使用了usbmuxd进行2222映射22端口,所以每当我换一部手机插上电脑使用ssh-p2222root@localhost时,就会得到以下提示-w600这个提示的处理办法也很简单,就是去.ssh目录下打开known_hosts文件将[localhost]:2222这一条数据删除,然后再次登录,就会重新写入新设备的记录,就可以登录
- sh 脚本文件
草原野马
zhi我们可以将经常执行的一系列终端命令行放到sh脚本文件中(shell),然后执行脚本文件sh脚本.pngusb.shpython/Users/zhangwei/Desktop/小码哥底层原理/逆向工具/usbmuxd-1.0.8/python-client/tcprelay.py22:10010login.shssh-p10010root@localhost支持中文的办法设置.png
- brew install --HEAD usbmuxd 报错 syntax error near unexpected token
充满活力的早晨
今天想配置flutter的环境,遇到蛋疼的问题,执行brewinstall--HEADusbmuxd报错syntaxerrornearunexpectedtoken....我按照网上的做法都做过了,都没有用,自己手动安装usbmuxd也不行。崩溃中,不过灵光一闪偶尔查到pkg-config命令,因此我就安装了pgk-config命令结果是pkg-config命令已经安装,但是unlink。到此蛋疼
- 2.USB 连接手机
霍霍o_o
下载usbmuxd工具包(主要用里面的一个python脚本:tcprelay.py)https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz找到tcprelay.py终端运行Pythontcprelay.py-t22:10010端口映射把本地端口10010映射到(手机)22端口登录sshroot@localhost
- 通过ssh连接到越狱iPhone
望杉洱
奉上参考文章,部分内容直接搬运,开篇表示感谢iproxy-通过USB使用SSH连接iOS设备1.安装usbmuxdbrewinstallusbmuxd安装usbmuxd库之后,就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口2.映射端口iproxy222222以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的2222端口,那么想和设备22端口通信,直
- iOS逆向(1):frida-ios-dump 破壳
LJDeveloper
准备工作:1.安装OpenSSH(iOS10以后可以跳过此步骤)2.配置dropbeariOS端配置:1.打开cydia添加源:https://build.frida.re2.添加源,安装Fridamac端配置:1.安装homebrew2.安装python(Mac自带python,注意默认版本)3.安装wget:brewinstallwget4.安装usbmuxd5.清理残留:rm~/get-pi
- usbmuxd +debugserver+lldb 调试
不聪明的猿类
1、电脑本地1234端口转发到手机的22端口,执行:leo-MacBook-Pro:~leo$/Users/leo/USBSSH/tcprelay.py-t22:12342、上一窗口不关闭,另起窗口使用ssh连接到手机,并用debugserver附加进程,如”Preferences“,执行:leo-MacBook-Pro:~leo$sshroot@localhost-p1234iPhone3:~r
- iOS逆向开发第二章-建立Tweak工程
pro_cookies
建立tweak工程,最重要的就是配置theos。这里插一段话,上一章讲了从无到用usbmuxd连接越狱手机,网上普遍文档是直接sshroot@ip的然后tweak的配置也是直接传到这个ip,而一部分讲的是usbmuxd用USB线连接越狱手机然而,我遇到的困难是sshroot@ip无法直接连接到手机,也不是错误,就是无反应,哪怕有个错误也好,开一整晚都无反应,而用pingip得到的是连接正常,关于这
- 使用usbmuxd服务,通过USB连接与PC端、Mac端实现通信,Peertalk的使用
张聪2021
一、usbmuxd介绍usbmuxd是苹果的一个服务,这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes、Xcode,都直接或间接地用到了这个服务。iTunes使用usbmux与iphone通信,它提供了一个USB-TCP的转换服务,这个服务在Mac端是由/System/Library/PrivateFrameworks/MobileDevice.f
- iOS debugserver 部署
Jameszj
操作环境:*iPadmini2,iOS9.2[Jailbroken]*iMac,OSXEICapitan*Xcode7.3.1*usbmuxd1.0.6[解压后放在Desktop目录下]1.定制debugServer导出debugserver.在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Device
- IPhone一起玩越狱 -(六)- USB登录Iphone用户
struggle3g
引言上篇讲到SSH连接,Wi-Fiip地址访问IPhone这篇就要讲到用USB去访问IPhoneUSB连接IPhone上篇讲到OpenSSH是集成了SSH的一个软件,安装在了手机SSH去访问手机,那么手机就要开启一个SSH的server手机开启的SSH的默认端口是221.准备usbmuxd工具在Mac、iOS上面都是自带的下载usbmuxd我们只需要python-client的文件夹里面的两个py
- 应用砸壳-dumpdecrypted(越狱)
lmfei
准备工作下载dumpdecrypted下载后,使用终端进入解压后的文件夹,执行make会生成dumpdecrypted.dylib动态库,后面会将这个动态库注入到目标应用程序的沙盒中端口映射下载usbmuxd,版本1.0.8下载成功后解压,并在终端中进入python-client文件目录下,执行pythontcprelay.py22:12345打开新的终端进行设备连接
[email protected]
- 越狱后常用命令
恋家的人走不丢
1、同一wifi下,电脑命令行:
[email protected]换成手机地址,可开启wifi远程ssh链接手机,输入命令行。2、通过usbmuxd,链接手机,输入命令速度更快,不会像wifi那样卡顿;终端执行代码。我的文件时放在Desktop/iOS逆向/usbmuxd/目录下,所以执行如下代码:python/Users/登录用户名/Desktop/iOS逆向/usbmuxd/tcpre
- 逆向环境搭建
helloworld_junyang
移动开发
usbmuxd的使用下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py)https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz将iPhone的22端口(SSH端口)映射到Mac本地的10010端口cd~/Documents/usbmuxd-1.0.8/pyt
- WARNING ITMS-90704: "Missing App Store Icon. &usbmuxd的2个应用场景
kunnan
appstore
前言本文重点usbmuxd的应用KNAFlexLoaderWARNINGITMS-90704:"MissingAppStoreIcon.iOSAppsmustincludea1024x1024pxAppStoreIconinPNGformat.WithoutprovidingtheiconintheAssetCatalogorviaiTunesConnect,appscannotbesubmitt
- iPhone通过usb与windows实现通信
进击的小短腿
ios
之前没怎么接触过这方面知识,最近有个需求需要实现这方面功能。于是上网查找资料,写了个小程序,实现了iPhone端和windows端的互联通信,原理基本上是这样的:windows端运行一个叫做usbmuxd的多路复用守护进程,该进程的作用是建立本地端口和远程端口的转发,实现usb到tcp的转换服务。window端通过本地127.0.0.1:27015连接到usb,然后指定和iPhone进行通信的端口
- 使用LLDB和debugserver对ios程序进行调试
weixin_30748995
运维python
在没有WIFI的情况下,使用USB连接IOS设备,使用辅助插件usbmuxd来辅助调试。我其实也想用wifi调试,奈何公司的wifi绑定了mac地址,而我又使用的是黑苹果虚拟机,使用桥接的方式修改网段也无法解决问题。没办法以后拷贝文件的用ifunbox,调试用usbmuxd。要想实现通过debugserver连接lldb来调试ios设备,要满足四部:1.把本地2222端口转发到ios的22端口,使
- sql统计相同项个数并按名次显示
朱辉辉33
javaoracle
现在有如下这样一个表:
A表
ID Name time
------------------------------
0001 aaa 2006-11-18
0002 ccc 2006-11-18
0003 eee 2006-11-18
0004 aaa 2006-11-18
0005 eee 2006-11-18
0004 aaa 2006-11-18
0002 ccc 20
- Android+Jquery Mobile学习系列-目录
白糖_
JQuery Mobile
最近在研究学习基于Android的移动应用开发,准备给家里人做一个应用程序用用。向公司手机移动团队咨询了下,觉得使用Android的WebView上手最快,因为WebView等于是一个内置浏览器,可以基于html页面开发,不用去学习Android自带的七七八八的控件。然后加上Jquery mobile的样式渲染和事件等,就能非常方便的做动态应用了。
从现在起,往后一段时间,我打算
- 如何给线程池命名
daysinsun
线程池
在系统运行后,在线程快照里总是看到线程池的名字为pool-xx,这样导致很不好定位,怎么给线程池一个有意义的名字呢。参照ThreadPoolExecutor类的ThreadFactory,自己实现ThreadFactory接口,重写newThread方法即可。参考代码如下:
public class Named
- IE 中"HTML Parsing Error:Unable to modify the parent container element before the
周凡杨
html解析errorreadyState
错误: IE 中"HTML Parsing Error:Unable to modify the parent container element before the child element is closed"
现象: 同事之间几个IE 测试情况下,有的报这个错,有的不报。经查询资料后,可归纳以下原因。
- java上传
g21121
java
我们在做web项目中通常会遇到上传文件的情况,用struts等框架的会直接用的自带的标签和组件,今天说的是利用servlet来完成上传。
我们这里利用到commons-fileupload组件,相关jar包可以取apache官网下载:http://commons.apache.org/
下面是servlet的代码:
//定义一个磁盘文件工厂
DiskFileItemFactory fact
- SpringMVC配置学习
510888780
springmvc
spring MVC配置详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。
一、Spring MVC环境搭建:(Spring 2.5.6 + Hi
- spring mvc-jfreeChart 柱图(1)
布衣凌宇
jfreechart
第一步:下载jfreeChart包,注意是jfreeChart文件lib目录下的,jcommon-1.0.23.jar和jfreechart-1.0.19.jar两个包即可;
第二步:配置web.xml;
web.xml代码如下
<servlet>
<servlet-name>jfreechart</servlet-nam
- 我的spring学习笔记13-容器扩展点之PropertyPlaceholderConfigurer
aijuans
Spring3
PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。我会在其他地方介绍。PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java P
- java 线程池使用 Runnable&Callable&Future
antlove
javathreadRunnablecallablefuture
1. 创建线程池
ExecutorService executorService = Executors.newCachedThreadPool();
2. 执行一次线程,调用Runnable接口实现
Future<?> future = executorService.submit(new DefaultRunnable());
System.out.prin
- XML语法元素结构的总结
百合不是茶
xml树结构
1.XML介绍1969年 gml (主要目的是要在不同的机器进行通信的数据规范)1985年 sgml standard generralized markup language1993年 html(www网)1998年 xml extensible markup language
- 改变eclipse编码格式
bijian1013
eclipse编码格式
1.改变整个工作空间的编码格式
改变整个工作空间的编码格式,这样以后新建的文件也是新设置的编码格式。
Eclipse->window->preferences->General->workspace-
- javascript中return的设计缺陷
bijian1013
JavaScriptAngularJS
代码1:
<script>
var gisService = (function(window)
{
return
{
name:function ()
{
alert(1);
}
};
})(this);
gisService.name();
&l
- 【持久化框架MyBatis3八】Spring集成MyBatis3
bit1129
Mybatis3
pom.xml配置
Maven的pom中主要包括:
MyBatis
MyBatis-Spring
Spring
MySQL-Connector-Java
Druid
applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>
&
- java web项目启动时自动加载自定义properties文件
bitray
javaWeb监听器相对路径
创建一个类
public class ContextInitListener implements ServletContextListener
使得该类成为一个监听器。用于监听整个容器生命周期的,主要是初始化和销毁的。
类创建后要在web.xml配置文件中增加一个简单的监听器配置,即刚才我们定义的类。
<listener>
<des
- 用nginx区分文件大小做出不同响应
ronin47
昨晚和前21v的同事聊天,说到我离职后一些技术上的更新。其中有个给某大客户(游戏下载类)的特殊需求设计,因为文件大小差距很大——估计是大版本和补丁的区别——又走的是同一个域名,而squid在响应比较大的文件时,尤其是初次下载的时候,性能比较差,所以拆成两组服务器,squid服务于较小的文件,通过pull方式从peer层获取,nginx服务于较大的文件,通过push方式由peer层分发同步。外部发布
- java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大
bylijinnan
java
package com.ljn.base;
import java.util.Arrays;
import java.util.Random;
public class ContinuousPoker {
/**
* Q67 扑克牌的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
* 2-10为数字本身,A为1,J为1
- 翟鸿燊老师语录
ccii
翟鸿燊
一、国学应用智慧TAT之亮剑精神A
1. 角色就是人格
就像你一回家的时候,你一进屋里面,你已经是儿子,是姑娘啦,给老爸老妈倒怀水吧,你还觉得你是老总呢?还拿派呢?就像今天一样,你们往这儿一坐,你们之间是什么,同学,是朋友。
还有下属最忌讳的就是领导向他询问情况的时候,什么我不知道,我不清楚,该你知道的你凭什么不知道
- [光速与宇宙]进行光速飞行的一些问题
comsci
问题
在人类整体进入宇宙时代,即将开展深空宇宙探索之前,我有几个猜想想告诉大家
仅仅是猜想。。。未经官方证实
1:要在宇宙中进行光速飞行,必须首先获得宇宙中的航行通行证,而这个航行通行证并不是我们平常认为的那种带钢印的证书,是什么呢? 下面我来告诉
- oracle undo解析
cwqcwqmax9
oracle
oracle undo解析2012-09-24 09:02:01 我来说两句 作者:虫师收藏 我要投稿
Undo是干嘛用的? &nb
- java中各种集合的详细介绍
dashuaifu
java集合
一,java中各种集合的关系图 Collection 接口的接口 对象的集合 ├ List 子接口 &n
- 卸载windows服务的方法
dcj3sjt126com
windowsservice
卸载Windows服务的方法
在Windows中,有一类程序称为服务,在操作系统内核加载完成后就开始加载。这里程序往往运行在操作系统的底层,因此资源占用比较大、执行效率比较高,比较有代表性的就是杀毒软件。但是一旦因为特殊原因不能正确卸载这些程序了,其加载在Windows内的服务就不容易删除了。即便是删除注册表中的相 应项目,虽然不启动了,但是系统中仍然存在此项服务,只是没有加载而已。如果安装其他
- Warning: The Copy Bundle Resources build phase contains this target's Info.plist
dcj3sjt126com
iosxcode
http://developer.apple.com/iphone/library/qa/qa2009/qa1649.html
Excerpt:
You are getting this warning because you probably added your Info.plist file to your Copy Bundle
- 2014之C++学习笔记(一)
Etwo
C++EtwoEtwoiterator迭代器
已经有很长一段时间没有写博客了,可能大家已经淡忘了Etwo这个人的存在,这一年多以来,本人从事了AS的相关开发工作,但最近一段时间,AS在天朝的没落,相信有很多码农也都清楚,现在的页游基本上达到饱和,手机上的游戏基本被unity3D与cocos占据,AS基本没有容身之处。so。。。最近我并不打算直接转型
- js跨越获取数据问题记录
haifengwuch
jsonpjsonAjax
js的跨越问题,普通的ajax无法获取服务器返回的值。
第一种解决方案,通过getson,后台配合方式,实现。
Java后台代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String ca
- 蓝色jQuery导航条
ini
JavaScripthtmljqueryWebhtml5
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/39.htmHTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jQuery鼠标悬停上下滑动导航条 - 柯乐义<
- linux部署jdk,tomcat,mysql
kerryg
jdktomcatlinuxmysql
1、安装java环境jdk:
一般系统都会默认自带的JDK,但是不太好用,都会卸载了,然后重新安装。
1.1)、卸载:
(rpm -qa :查询已经安装哪些软件包;
rmp -q 软件包:查询指定包是否已
- DOMContentLoaded VS onload VS onreadystatechange
mutongwu
jqueryjs
1. DOMContentLoaded 在页面html、script、style加载完毕即可触发,无需等待所有资源(image/iframe)加载完毕。(IE9+)
2. onload是最早支持的事件,要求所有资源加载完毕触发。
3. onreadystatechange 开始在IE引入,后来其它浏览器也有一定的实现。涉及以下 document , applet, embed, fra
- sql批量插入数据
qifeifei
批量插入
hi,
自己在做工程的时候,遇到批量插入数据的数据修复场景。我的思路是在插入前准备一个临时表,临时表的整理就看当时的选择条件了,临时表就是要插入的数据集,最后再批量插入到数据库中。
WITH tempT AS (
SELECT
item_id AS combo_id,
item_id,
now() AS create_date
FROM
a
- log4j打印日志文件 如何实现相对路径到 项目工程下
thinkfreer
Weblog4j应用服务器日志
最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了Apache 的log4j,但是在选择相对路径那块 卡主了,X度了好多方法(其实大多都是一样的内用,还一个字都不差的),都没有能解决问题,无奈搞了2天终于解决了,与大家分享一下
需求:
用户登录该网站时,把用户的登录名,ip,时间。统计到一个txt文档里,以方便其他系统调用此txt。项目名
- linux下mysql-5.6.23.tar.gz安装与配置
笑我痴狂
mysqllinuxunix
1.卸载系统默认的mysql
[root@localhost ~]# rpm -qa | grep mysql
mysql-libs-5.1.66-2.el6_3.x86_64
mysql-devel-5.1.66-2.el6_3.x86_64
mysql-5.1.66-2.el6_3.x86_64
[root@localhost ~]# rpm -e mysql-libs-5.1