【电池充电程序源码】【木乃伊迷宫源码】【dnf钻石源码】uiautomatorviewer源码

来源:教育app源码下载

1.对小绵羊轰炸APP的逆向分析
2.十分钟弄懂最快的APP自动化工具uiautomator2(入门到精通)
3.Android自动化测试框架uiautomator2详解
4.如何使用和调试 android UIAutomator
5.在某些版本手机中通过UIAutomatorViewer工具无法获取手机屏幕元素的信息?
6.Android Studio 中使用uiautomatorviewer插件

uiautomatorviewer源码

对小绵羊轰炸APP的逆向分析

       偶然的机会,我接触到了一款名为“小绵羊”的轰炸APP。该APP的主要功能是用户可以在编辑框中输入指定的手机号码,然后APP会对该号码进行短信的狂轰滥炸。接下来,我将从开发者的电池充电程序源码视角,对这款APP进行深入的逆向分析。

       首先,对于这类潜在风险的APP,建议在模拟器上进行安装和分析,这样能够确保分析过程的安全。通过壳分析,我们发现“小绵羊”APP并没有使用加固保护,这大大简化了分析的难度。使用jadx工具,我们揭示了APP的结构,它主要由Java代码、C++代码(SO文件)、资源数据、Lua数据和签名信息构成。Java层的代码使用了proguard插件进行了混淆保护,虽然成本不高,但混淆的效果并不明显。

       当我们启动APP,使用uiautomatorviewer工具进行分析后,发现界面主要由一个EditText和三个Button控件组成。界面的木乃伊迷宫源码背景颜色是通过Lua脚本实现的。APP的签名信息使用的是V1方式,这是Android最早期的数字证书签名方式。V1签名适用于Android 7.0系统中引入的V2签名,以及Android 9.0系统中引入的V3签名。当前,大多数APP都采用了V1和V2签名相结合的方式,以确保签名的顺序正确。

       在Android的开发过程中,签名是一个必要的步骤,它能够确保APP能够通过系统的验证,并且能够顺利的安装。数字证书遵循的是X.的国际标准,它用于验证身份和公钥信息。在AndroidManifest.xml文件中,包含了APP所需的权限、四大组件的信息以及包相关的配置。APP申请的权限符合Android的安全机制和国内的合规要求,具体的权限包括:访问网络、获取网络信息、WiFi接入、写入外部存储、读写短信、读写系统设置、清除缓存、连接蓝牙、振动、dnf钻石源码读取日志和截图。

       APP的功能主要集成在Lua脚本中,包括界面的显示和轰炸功能。Lua是一种动态的脚本语言,需要通过JNI封装,才能在Java环境中使用。用户输入手机号后,APP会执行发送个网络数据包的操作,主要针对各种网站的注册验证码进行轰炸。脚本中还包含了对***的判断,如果网络状态是***,APP会记录时间点并关闭自己。

       对于这款APP的破解,只需要清空禁用文件即可。APP所使用的SO文件是通用的网络和socket操作,并没有太多的研究价值。通过分析libsocket.so,我们可以确认APP使用的是LuaSocket 3.0版本,这个版本提供了多种网络协议的访问操作。

       总结来说,这款轰炸APP并没有采取任何的保护措施,因此分析起来相对简单。在分析过程中,主要使用的工具包括jadx、charles、ida和uiautomatorviewer。头像更换源码开发者精心设计了个网站的轰炸功能。然而,对于这种具有攻击性的APP,我们应当保持谨慎的态度,警惕免费功能背后可能隐藏的风险。

十分钟弄懂最快的APP自动化工具uiautomator2(入门到精通)

       前言

       了解许多使用appium进行应用自动化测试的人会发现,appium运行效率较低、耗时长,而uiautomatorviewer在定位UI元素时需要关闭appium server,同时在低版本的appium上获取toast需要进行额外的配置。而uiautomator2作为uiautomator的升级版,通过封装为Python库,提供了简便的环境搭建、快速的执行速度、便捷的UI元素定位、简单获取toast功能。本篇文章将带你快速掌握uiautomator2,用十分钟时间深入了解。

       一、介绍

       uiautomator2是Google开发的一款针对Android应用自动化测试的Java库的升级版本,它以Python库的形式提供,简化了开发流程。其主要优点包括环境搭建方便、执行速度快、UI元素定位直观便捷、易于理解,监控安装源码且能够轻松获取toast信息。

       二、环境部署

       1. 安装adb并配置环境变量,查看版本以确保安装成功。

       2. 使用pip安装uiautomator2库,运行命令:pip install -U uiautomator2。

       3. 下载并安装atx-agent,确保adb devices能查看到模拟器连接,并通过python-m uiautomator2 init命令安装。

       4. 使用pip安装weditor,命令:pip install -U weditor,实现UI元素的可视化查看。

       三、编写百度贴吧首页脚本

       本节将通过编写百度贴吧首页自动化测试用例,来展示uiautomator2提供的方法和特性。以下步骤将逐步介绍如何使用uiautomator2连接设备、启动app、使用UI元素定位和滑动操作,以及如何编写测试代码。

       四、uiautomator2与appium运行速度比较

       通过对比使用uiautomator2和appium执行相同用例的运行时间,发现uiautomator2在相同条件下运行时间更短,效率更高。随着用例复杂度的增加,性能优势更为显著。

       五、总结

       uiautomator2提供了一个功能全面、易于上手的自动化测试工具,通过本文的介绍,你将能够快速掌握uiautomator2的关键功能,提升应用自动化测试的效率。此外,通过加入软件测试学习交流群,你可以与同行交流经验,共同提升测试技能。

       请记住,不断学习和实践是提升技能的关键,同时要保持对新技术的好奇心和学习动力。在软件测试的道路上,内外兼修才能让你更加强大。

Android自动化测试框架uiautomator2详解

       uiautomator2是一种Android自动化测试框架,它提供了多种操作方法,如点击、长按、输入文本、滑动、拖拽、截屏等,能够模拟用户的各种动作。用户可以通过控件的id或text等属性,定位到控件,从而对控件实施上述操作。

       在搭建环境时,首先需要配置python环境变量,将指定的路径添加到系统环境变量中的path中。接着,设置pycharm的编码格式,避免乱码。最后,通过运行特定的代码安装uiautomator2。

       若内网无法下载,可以尝试使用手机为PC开启热点。weditor是一种页面信息查看工具,可以查看页面包名、运行的Activity、页面布局、控件等信息。若执行初始化命令失败,可能是端口被其他进程占用,可以通过查看占用该端口的进程并kill掉,或者执行特定命令后再尝试。

       用户可以通过坐标控制按钮,但通过坐标不能获取对文本框的控制权。控件通常具有resourceId、text、description、className等属性,用户可以通过这些属性轻松定位到指定控件,实现对控件的控制。

       uiautomatorviewer是Android SDK中提供的页面信息查看工具,用户可以通过单击文件进入界面。使用Android Studio下载最新的platform-tools和tools,配置系统环境变量,关闭ATX软件。

       在应用uiautomator2框架时,需要导入包。设备连接分为有线连接和无线连接。应用控制包括安装应用、打开应用、关闭应用、关闭所有应用。元素定位可以通过控件的属性进行。元素控制包括单击、双击、长按、文本操作等。手势控制包括滑动、拖拽。系统控制包括按键、旋转、截屏等。此外,还可以通过adb shell input和os.system(command)实现模拟输入。

如何使用和调试 android UIAutomator

       Google在sdk4.0以后提供了一个自动化解决方案uiautomator:

       ä¼˜ç‚¹ï¼šå¯ä»¥è·¨åº”用了;这可是亲生的;

       ç¼ºç‚¹ï¼šå¿…é¡»sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为jar后需要push到手机才能运行,也就是说必须打印日志暴力调试。

       Appium基于Android InstrumentationFramework和UIAutomator,也就是说这个工具是可以跨应用的。说远了,好吧,为了帮大家更容易理解appium的使用,我这里就讲一下uiautomator的使用方法。

       ä½ åº”该有android-sdk吧,升级到4.0以上,进入目录android-sdk\tools,你会看到两个文件:

       traceview.bat 和 uiautomatorviewer.bat,这俩文件让你想起了monkeyrunner了吧,是的,traceview.bat就对应于hierarchyviewer.bat,用来查看程序的ui界面的,通常也是使用管理员权限启动的。

       å¥½äº†ï¼ŒçŽ°åœ¨ç”¨eclipse创建一个java project,是的,你没看错,是java project不是android project,添加引用:

       åœ¨project.properties中内容为:

       # Project target.

       target= android-

       è¿™é‡Œçš„android-需要和之前的android.jar和uiautomator.jar位置相一致。

       ç„¶åŽå‘¢ï¼Ÿå†™ä»£ç å§ï¼Œå»ºç«‹ä¸€ä¸ªç±»ï¼Œå¾—,发个给大家参考:

       package com.uia.example.my;

       import org.apache..android.uiautomator.core.UiObject;

       import com.android.uiautomator.core.UiObjectNotFoundException;

       import com.android.uiautomator.core.UiScrollable;

       import com.android.uiautomator.core. UiSelector ;

       import com.android.uiautomator.testrunner.UiAutomatorTestCase;

       import java.io.File;

       import java.io.FileOutputStream;

       import java.io.IOException;

       public class TAppWorkAssistV1 extends UiAutomatorTestCase {

       public String sLog ;

       public File fout = null ;

       public FileOutputStream outStream = null ;

       public void write2file(String filename,String sData)

       {

       String sLog= “” ;

       // 初始化日志文件

       if (Environment. getExternalStorageState ()。equals(Environment.MEDIA_MOUNTED )){

       sLog = Environment. getExternalStorageDirectory()。getAbsolutePath();

       try {

       fout = new File(sLog,filename);

       outStream = new FileOutputStream( fout , true ); // 此处的 true 是append

       sData=sData + “\n” ;

       outStream .write(sData.getBytes());

       outStream .flush();

       outStream .close();

       fout = null ;

       }

       catch (Exception e){

       e.printStackTrace();

       }

       } else {

       System. out .println( “ 该手机没有 SD 卡 ” );

       }

       }

       public void testDemo() throws UiObjectNotFoundException {

       //1. 启动 app

       getUiDevice()。pressHome();

       UiObject allAppsButton = new UiObject( newUiSelector()。description( “Apps” ));

       allAppsButton.clickAndWaitForNewWindow();

       UiObject appsTab = new UiObject( new UiSelector()。text( “Apps” ));

       appsTab.click();

       UiScrollable appViews = new UiScrollable( newUiSelector()。scrollable( true ));

       UiObject settingsApp = appViews.getChildByText( newUiSelector()。className(android.widget.TextView. class .getName()), “Efilm” );

       settingsApp.clickAndWaitForNewWindow();

       //2. 进入主界面

       System. out .println( “into main view” );

       System. out .println(getUiDevice()。waitForWindowUpdate(“com.eshore.efilm” , ));

       System. out .println( “intoed main view” );

       UiObject tv1 = new UiObject( new UiSelector()。text( “ 影院 ” ));

       tv1.click();

       //3. 点击影院

       UiObject oyy= new UiObject( new UiSelector()。description(“cinema_row” ));

       System. out .println( “wait yingyuan come out” );

       oyy.waitForExists();

       System. out .println( “yingyuan come out” );

       oyy.clickAndWaitForNewWindow();

       System. out .println( “click yingyuan” );

       //4. 场次

       UiObject occ= new UiObject( new UiSelector()。description(“LinearLayout” ));

       System. out .println( “wait changci come out” );

       oyy.waitForExists();

       System. out .println( “changci come out” );

       occ.clickAndWaitForNewWindow();

       System. out .println( “click changci” );

       //5. 座位

       UiObject oseat= new UiObject( new UiSelector()。description(“cinema_shows_list_item” )。index(0)。childSelector( newUiSelector()。description( “LinearLayout” )));

       System. out .println( “wait seat come out” );

       oseat.waitForExists();

       int h=getUiDevice()。getDisplayHeight();

       int w=getUiDevice()。getDisplayWidth();

       System. out .println( “(h/2,w/2)=” +h/2+ “,” +w/2);

       getUiDevice()。click(h/2,w/2);

       //System.out.println(“seat count:”+String.valueOf(oseat.getChildCount()));

       //System.out.println(“seat getText:”+ oseat.getText());

       // 截座位图

       Process process;

       try {

       process = Runtime. getRuntime ()。exec( “screencap /mnt/sdcard/EfilmFailSnapShot.png” );

       try {

       process.waitFor();

       } catch (InterruptedException e) { // TODO Auto-generated catch block

       e.printStackTrace();

       }

       } catch (IOException e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

       }

       //takeScreenShots(“EfilmSeatSnapShot”);

       }

       }

       è¿™ä¸ªä¾‹å­æ˜¯éšä¾¿å†™çš„,可能不够严谨。大体就这么个情况吧。下一步就是编译执行了,先插上手机usb接口,然后打开cmd,执行:

       æ‰¾åˆ°SDKID,也就是android create中的-t参数:

       cd C:\ PROGRAM\android-sdk\tools

       android list

       æ‰¾åˆ°t参数的值以后:

       cd C:\ PROGRAM\android-sdk\tools

       android create uitest-project -n TAppWorkAssistV1 -t -p C:\android自动化\Tv2.0\TestSetting

       cd C:\android自动化\Tv2.0\TestSetting

       ant build

       cd C:\android自动化\Tv2.0\TestSetting\bin

       adb push TAppWorkAssistV1.jar /data/local/tmp/

       adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1

       çœ‹äº†çœ‹ï¼Œå¥½åƒæ²¡æœ‰ä»€ä¹ˆç‰¹åˆ«å€¼å¾—解释的

       -n TAppWorkAssistV1:类名

       -p: 项目所在目录

       Ant build 把这个类编译成一个jar包:TAppWorkAssistV1.jar

       ç„¶åŽæŠŠjar包push到手机上,调用执行这个类就可以了

       å¤§è‡´æ˜¯è¿™ä¹ˆä¸ªæ­¥éª¤ï¼Œä¸è¿‡æœ‰ä¸€ä¸ªéžå¸¸é‡è¦çš„细节,就是如果你需要更省心,就最好把界面元素,无论动态的还是布局文件中的,都加上content-description属性,并保证唯一性,根据:

       UiSelector:description(String desc)

       Set the search criteria to match thecontent-description property for a widget.

       é‚£å°±å¯ä»¥ç»Ÿä¸€åªä½¿ç”¨è¿™ä¸€ä¸ªå¼•ç”¨ç•Œé¢å…ƒç´ çš„方法就行了,就不用去想方设法利用其它的属性来引用了。

在某些版本手机中通过UIAutomatorViewer工具无法获取手机屏幕元素的信息?

       如果你的工具只能获取到桌面,而进入任何一个APP界面,都无法获取到界面信息时,原因可能是sdk API版本过低,被听其他的瞎说什么手机没root,或者本身不支持之类,都是瞎扯。正确的解决方法是:

       1.通过Android Studio或者IDEA下载更高级的API版本,我是把最新的,都下了,这和手机本身是不是android最新版本没关系。

       2.升级后你可能会遇到一个adb连接不上手机的问题,这个请参考:

Android Studio 中使用uiautomatorviewer插件

       在Android开发过程中,了解应用界面的布局与控件信息至关重要。本文介绍Android Studio中一款名为uiautomatorviewer.bat的插件,帮助开发者直观查看和分析Android设备上的UI组件。

       Android Studio作为Google官方推荐的集成开发环境,集成了多种开发工具与资源管理,使开发者能高效地进行代码编写、调试、测试等操作。这款插件正是Android Studio集成的UI自动化工具之一,能帮助开发者在不打开应用的情况下,直接查看和分析设备屏幕上的UI控件。

       安装uiautomatorviewer.bat插件相对简单,在Android Studio中打开SDK Manager,选择SDK Tools,并确保安装最新版本。插件安装完成后,可在指定路径下找到uiautomatorviewer.bat文件,双击即可启动。

       使用uiautomatorviewer.bat时,屏幕会显示四个功能图标。通过这些图标,开发者可以轻松获取和管理设备上的控件信息。具体操作包括打开本地保存的View树文件、实时获取屏幕的控件层次结构信息、压缩显示控件信息及将控件结构保存为文件。在获取控件信息后,开发者可通过资源-id、类(class)、包(package)等属性,深入了解控件的属性与来源。

       总之,uiautomatorviewer.bat插件为Android开发者提供了一种便捷的手段,用于查看和分析设备屏幕上的UI组件,有助于优化界面设计与交互逻辑。更多技术文章可关注“极客之昂”公众号,获取最新信息与交流。

文章所属分类:休闲频道,点击进入>>