2019-09-30 16:16:17 u011077027 阅读数 158
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13490 人正在学习 去看看 CSDN讲师

实现一个病毒扫描app——python爬取病毒样本

开篇

最近闲来无事,准备做一个病毒扫描的app,那么从哪里开始呢?

首先来分析下一般的查杀步骤都有哪些

  1. 基于黑白名单的查杀

    这种是有一个庞大的数据库,里面放着各个厂商扫出来的病毒样本,里面放着病毒文件md5/病毒各种信息

    只需要将你的包名或者签名或者文件md5传进去就能辨别是不是有毒

  2. 基于特征码的扫描

    这种就是有一个病毒特征码库,通过对apk解包,深度扫描文件里是不是存在病毒

再开篇

首先我们要做个病毒库,难道要去网络上把各个厂商的病毒库都拿过来,还是要自己做一个网站等着别人来上传病毒,好像都不行,那得到猴年马月去了,今天 我们要做的就是将网络上的别人做好病毒库用python把他们爬取出来

正篇

首先我们使用的是python3,python2就不要搞事情了

首先先确定要爬取的页面

# 好吧,我就找到这一个免费的
urlprefix = 'http://www.virscan.org/reportlist'

然后我们既然做爬虫,咱就要伪装成正常用户

# 伪装成浏览器访问,适用于拒绝爬虫的网站
headers = {'User-Agent': 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10',
           'Referer': 'http://www.baidu.com/'}

第一步要访问这个界面

import re
import urllib.parse
import urllib.request
import bs4
import time

reponse = urllib.request.Request(myurl)
html = urllib.request.urlopen(reponse).read().decode("utf-8")

# 解析html
soup = bs4.BeautifulSoup(html, 'html.parser')

拿到了html之后,就可以搞事情了

界面1

对,就是要拿到这个里面的这个页数的链接

# 正则解析页面URL
    pattern = r'/reportlist/\w+'
    liResult = soup.find_all('a', href=re.compile(pattern))

    # 找到页面最大值
    maxPage = 1
    for link in liResult:
        url2 = link['href']
        page = url2.split('/')[-1]
        if maxPage < int(page):
            maxPage = int(page)

    print(maxPage)
    # 访问查找到url
    for x in range(1, maxPage+1):
        pageUrl = myurl+'/%d' % (x)
        # print(pageUrl)
        getReport(pageUrl)
        time.sleep(1)

通过上面的步骤我们拿到了每一页的url,下面开始访问每一页的数据了

def getReport(myurl):
    #print('---------getReport-->'+myurl)
    reponse = urllib.request.Request(myurl)
    html = urllib.request.urlopen(reponse).read().decode("utf-8")
    # 解析html
    soup = bs4.BeautifulSoup(html, 'html.parser')

    # 查找首页所有a链接,匹配想要的URL格式(v.xxx内容)
    pattern = r'http://v.virscan.org/\w+'  # URL格式
    vLinks = soup.find_all('a', href=re.compile(pattern))
    for vlink in vLinks:
        url3 = urllib.parse.quote(vlink['href'])
        url3 = url3.replace('http%3A', 'http:')
        # print(url3)
        if vlink.has_attr('alt'):
            vn = vlink['alt']
        else:
            vn = ''
        # print(vn)
        # 只扫面和Android相关的病毒链接
        if 'android' in url3.lower():
            # 获取到病毒名称
            if vn == '':
                vn = url3.split('/')[-1][0:-5]
                vn = urllib.parse.unquote(vn)
            print('get antivirus name :'+vn)
            getAndroidVirusReport(url3)
            time.sleep(1)

通过上面的代码找到的就是它

图片2

然后点进去开始爬取详情

def getAndroidVirusReport(myurl):
    #print('--------getAndroidReport-->'+myurl)
    reponse = urllib.request.Request(myurl)
    html = urllib.request.urlopen(reponse).read().decode("utf-8")
    # 解析html
    soup = bs4.BeautifulSoup(html, 'html.parser')

    basepageurl = urllib.parse.unquote(myurl[:-5]) + '/'

    # 获取详解界面
    pattern = 'http://v.virscan.org/'
    VInfoLinks = soup.find_all('a', href=re.compile(pattern))
    # 这里是找到页面最大值,然后for循环访问
    maxpagenum = 1
    for link in VInfoLinks:    
        url4 = link['href']
        numstr = url4.split('/')[-1][0:-5]
        try:
            if maxpagenum < int(numstr):
                maxpagenum = int(numstr)
               
        except:
            continue
    print('found max page:'+ str(maxpagenum))

    for i in range(1, maxpagenum+1):
        url5 = urllib.parse.quote(basepageurl + str(i) + '.html')
        url5 = url5.replace('http%3A','http:')
        #print(url5)
        getAndroidVirusPage(url5)
        time.sleep(1)

图片3

点进去就是上面这样,病毒的文件的md5就拿到了,这时候不要要着急,还要把这个md5取出来

# 获取病毒md5值
def getAndroidVirusPage(myurl):
    #print('--------getAndroidVirusPage-->'+myurl)
    reponse = urllib.request.Request(myurl)
    html = urllib.request.urlopen(reponse).read().decode("utf-8")
    # 解析html
    soup = bs4.BeautifulSoup(html, 'html.parser')
    # 拿到md5值
    pattern = r'http://md5.virscan.org/\w+'  #URL格式
    md5Links = soup.find_all('a', href=re.compile(pattern))
    for link in md5Links:    
        url6 = link['href']
        md5str = url6.split('/')[-1][0:-5]
        print("get file md5 :"+md5str)
    

好了,到此结束,我们拿到了病毒文件md5

下面还要把它存到数据库,然后客户端获取到这个数据库,然后就是各种比对找出病毒就行了

2018-10-29 18:51:49 u012124438 阅读数 7967
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13490 人正在学习 去看看 CSDN讲师

由于博主长期从事海外App的开发,所以心系谷歌爸爸的动向呀,最近谷歌爸爸推出了一个Android App Bundle的东西,据说可以压缩包体,当然这仅限于上传Google Play的应用,国内市场不支持,当然我们也可以学习谷歌爸爸的思想。
在这里插入图片描述

概述

Android App Bundle是Google最新推出的Apk动态打包,动态组件化的技术,与Instant App不同,AAB是借助Split Apk完成动态加载,使用AAB动态下发方式,可以大幅度减少应用体积。
在这里插入图片描述

从这个动态图中,我们就可以大概知道了App Bundle的原理是什么,App Bundle将这些特性在多个维度进行拆分,在资源维度,ABI维度和Language维度进行了拆分,你只要按需组装你的Apk然后安装即可。再说的直白一点就是,比如,项目中可能会xxhdpi,xhdpi各有一套图,或者x86,armeabi的又各有一套so库,以前的安装方式,是把这些全部装进用户的手机中,使用App Bundle,假设你是一个x86,xxhdpi的手机,那么App Bundle会帮你拼装好一个apk,这个apk的资源只有xxhdpi的,而且so库只有x86,其他无关的都会剔除。

App Bundles将一个apk拆分成多个apk,我们的apk一般会被拆分为如下几个部分:

Base Apk:首次安装的apk,公共代码和资源,所以其他的模块都基于Base Apk;
Configuration APKs:native libraries 和适配当前手机屏幕分辨率的资源;
Dynamic feature APKs:不需要在首次安装就加载的模块。

在这里插入图片描述

AAB并不是一个插件化框架,它利用的是Android Framework提供的split apks技术来完成的,而所有安装split apk工作均是通过IPC交由google play完成。 想了解更多关于split apks的内容,请关注这里:
https://developer.android.com/studio/build/configure-apk-splits?authuser=2

如何使用App Bundle

在这里插入图片描述
1.将你的Android Studio升级为3.2及其以上版本
2.添加对Dynamic Delivery的支持
其实就是一些基础apk需要东西,比如签名,MAIN入口等,详细请阅读:
https://developer.android.google.cn/studio/projects/dynamic-delivery
3.构建App Bundle
在这里插入图片描述
当你是3.2以上的studio时候,就可以选择build bundle,来构建app bundle的文件
在这里插入图片描述
构建出来就是一个.aab文件

4.通过bundletool工具来测试你的.aab文件
下载地址:https://github.com/google/bundletool
解压出来就是一个jar包,以bundletool-all-0.6.0.jar为例子

bundletool-all-0.6.0.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

这个命令构建出来的是没有签名的文件,要有签名的,需要如下:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

这些参数的说明详见如下:
在这里插入图片描述
在这里插入图片描述

无疑就是一些打包的签名,密码等,还有一些特殊的属性,详细大家可以看英文介绍,使用命令后,出来的是app.apks文件,我们可以解压缩一下,出来就是如下的内容:
在这里插入图片描述

在这里插入图片描述

从打包出来的东西,更印证了我们前面所说的原理

5.app的签名上传google play
6.将你的包上传到google console

兼容性问题

Api < 21的手机无法进行模块化,Google Play会对其进行Multiple Apks操作来进行下发操作。
Enable on-demand: 是否启用按需下载,如果不启用,会直接打进Apk
Fusing:熔断操作,是否安装到不支持按需下载的设备中
Module title: 模块标题

对于动态组件的一些使用场景

语言包的动态下发
当Split 针对语言进行划分时候,用户下载的Apk仅仅只能下载下来一个Base Apk,包含他的当前系统语言,你可以将其他语言包作为Dynamic feature下发给用户,做到语言包的动态下发

功能的动态下发
对于某些独立的feature,这其实跟之前的插件化方案有异曲同工之处,而且天然支持友好,动态下发业务需求能有效的减少包大小,增加启动速度,减少安装时间等等。

2018-03-17 21:14:21 baidu_37461180 阅读数 1903
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13490 人正在学习 去看看 CSDN讲师

移动APP面临的威胁:木马、病毒、钓鱼、破解、篡改、二次打包、账号窃取、广告植入、信息劫持等

一、Android APP安全测试思路分析:

1.安全测试工具

2.基础环境

3.数据安全

4.程序安全

5.数据传输

6.业务安全

二、APP面临的风险

1.不安全的服务器访问控制

2.不安全的数据存储

3.传输层保护不足

4.非预期的数据泄露

5.脆弱的认证和授权

6.已知的不安全加密方式

7.客户端注入

8.通过不被信任的输入改变安全设定

9.会话处理不当

10.缺乏二进制保护

三、业务数据流

数据输入基础环境安全
数据存储数据安全
内部传输程序安全
通讯通讯安全
服务器业务安全

 四、所需知识

Linux     Android系统编程         逆向       其它知识  
常用操作命令adb命令Java语法Smali语法http/ https
 安全框架NDK编程Dex文件格式html
 程序运行机制SDK编程ARM汇编XSS
 常见漏洞  JS

五、使用工具

大部分工具获取地址:http://www.androiddevtools.cn/

基础环境安全数据安全程序安全通讯安全安卓原生工具
APKToollogcat     DrozerKeytoolBusybox

Dex2jar、JD-Gui

Sublime TextSmaliViewBurpsuitesetpropex
Jeb IDASQLiteIntent FuzzerTcpdumpstrace
Droid_injectso
 Fiddler

六、基础环境安全

1.基础环境安全测试内容:反编译、逆向、Intent注入、键盘记录、屏幕截取等

2.反编译:工具获取地址:http://www.androiddevtools.cn/

  反编译步骤请参考:https://blog.csdn.net/s13383754499/article/details/78914592

3.反编译后能干啥?修改资源文件,比如替换应用图标、名称、版本,甚至植入广告等


七、数据安全

 1.数据存储、日志,硬编码中的用户信息泄露,应用数据一般都存放在/data/data/<appname>目录下,检查sharedpreference 、files、databases存储的用户信息,比如用户的密码、电话、银行卡等信息是否明文显示,或不安全的加密方式

2.查看数据库文件:chmod修改文件夹或文件权限,使用adb pull命令导出到本地,然后用数据库软件查看,比如SQLite

3.日志的检测,检查内容和上面相似

 adb shell

ps | grep mw 查找到客户端的进程号

logcat | grep pid 查看进程输出的日志

4.硬编码检测:反编译出来的Smali源码中搜索关键字符串,password,admin,AES_KEY等,是否有账号密码等信息

八、程序安全

1.防止二次打包,篡改

2.Smali :     https://blog.csdn.net/lixpjita39/article/details/75193833


九、安全扫描工具

在google市场下个AVL pro用里面的应用分析器


十、其它测试推荐

1.IOS

https://bbs.pediy.com/thread-163216.htm

2.Android

https://bbs.pediy.com/thread-163215.htm

(以上内容纯属学习摘取,大家共同学习进步)

2015-12-15 21:03:43 boyangel 阅读数 8567
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13490 人正在学习 去看看 CSDN讲师

最近做的一个Android APP,也没有什么难度,主要是用来扫描RFID超高频的标签,并将扫描到的数据上传到服务器,我从CSDN获益良多,现把此APP的效果图和重点程序贴出,希望能帮到一些热爱安卓的人。

APP效果图如下:

  1. app启动图标
    APP启动超贱图标
  2. 连接模块,如果不成功则显示重连页面
    连接模块
  3. 主显示页面
    主页面
  4. 扫描后的显示,FLG标志为上传是否成功
    扫描显示
  5. 菜单页面,clear代表清空主页面的显示,upload表示手动上传,setting为设置界面
    菜单
  6. 设置界面
    setting
2019-11-11 16:02:21 yudelian 阅读数 5
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13490 人正在学习 去看看 CSDN讲师

scan result的使用说明

https://developer.android.com/guide/topics/connectivity/wifi-scan

https://developer.android.com/reference/android/net/wifi/ScanResult

 

2、android app的startScan接口,调用两次后会失败

根据下面的说法:现在的android app每两分钟只能成功执行4次startScan接口

https://blog.csdn.net/z191726501/article/details/86486438

Android app 适配

阅读数 856

android app适配 分辨率 dpi

博文 来自: lizhongyisailang

Android app的国际化

阅读数 576

android app的国际化

博文 来自: zz531987464

Android APP 基础知识

阅读数 1074

没有更多推荐了,返回首页