閱讀850 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用函數計算來抽取apk信息

之前的博客中我們看到,可以使用函數計算來實現一個自定義的圖像處理服務,這個服務是穩定、可靠、彈性伸縮的,並且它是無服務器架構,按函數的調用時間收費,節省了服務器閑置的開銷和運維成本。

使用函數計算可以方便地構建類似的微服務,比如我們可以創建一個處理android apk文件的微服務:

  • 小吳將下載的apk文件上傳到OSS
  • 他想分析一下這些apk應用的權限信息:
    1. 使用aapt工具抽取出每個apk文件的權限信息
    2. 將它們錄入到數據庫中(rds),方便日後查詢

步驟

1. 創建一個OSS bucket

https://oss.console.aliyun.com/index

注意創建bucket時選擇“華東2”區域。

image

2. 創建RDS數據庫

https://rdsnew.console.aliyun.com/

  1. 在RDS控製台創建一個實例(注意選擇華東2區域和經典網絡) image
  2. 選擇實例創建一個數據庫
  3. 創建一個用戶並授權其訪問數據庫的權限
  4. 添加白名單,允許所有的IP訪問 image

3. 創建函數計算的服務和函數

https://fc.console.aliyun.com

  1. 創建服務
    image

  2. 準備aapt工具
    函數計算的運行環境是基於debian:8的鏡像,因此我們最好在同樣的環境下下載aapt工具:

    1. docker run -it -v $(pwd):/opt debian:8
    2. 在容器中運行apt-get update && apt-get install -y aapt
    3. 將aapt及其所依賴的庫從容器中拷貝出來:
    4. mkdir /opt/aapt
    5. cp $(which aapt) /opt/aapt/
    6. cp -R /usr/lib/android /opt/aapt/
    7. ldd $(which aapt) | grep -v android將其所依賴的庫也拷貝到/opt/aapt/
  3. 準備函數代碼
    由於函數用到了mysql這個模塊,所以需要將其安裝:

    1. npm install mysql 安裝完畢之後,整個代碼目錄的結構是這樣的: image
  4. 打包上傳到OSS
    將整個代碼目錄打包成zip:

    1. 編輯index.js將其中的數據庫信息替換成自己真實的信息
    2. zip -r code.zip *
    3. 將code.zip上傳到OSS
  5. 創建函數
    image
    跳過觸發器的設置,完成函數創建。

函數的關鍵代碼如下,完整的代碼包點此下載

  ossClient.get(objectName, apkPath).then(function(res) {
    exec.execFile(
      '/code/aapt/aapt', ['dump', 'permissions', apkPath],
      {
        env: {
          'LD_LIBRARY_PATH': '/code/aapt:/code/aapt/android',
        },
      }, function(err, stdout, stderr) {
        if (err) {
          callback(err);
          return;
        }
        var apkPerm = stdout;
        console.log('%s permissions: %s', apkName, apkPerm);

        conn.query(
          'CREATE TABLE IF NOT EXISTS APK_PERM(NAME VARCHAR(50) NOT NULL, PERM TEXT, PRIMARY KEY (NAME))',
          function(err) {
            if (err) {
              callback(err);
              return;
            }

            conn.query(
              'REPLACE INTO APK_PERM VALUES (?, ?)', [apkName, apkPerm], function(err, results) {
                if (err) {
                  callback(err);
                  return;
                }
                console.log('insert ok: %s', results);
                callback(null, 'ok');
              }
            );
          });
      });
  }).catch(function(err) {
    console.error('error: ', err);
    callback(err);
  });

4. 運行函數並查看結果

https://fc.console.aliyun.com

  1. 先將需要分析的apk文件上傳到OSS
  2. 在函數計算控製台執行函數,指定event的內容為apk文件所在位置 image

可以看到函數運行成功,接下來我們可以去RDS數據庫中確認一下:

image

最後更新:2017-05-26 20:01:11

  上一篇:go  DT科技評論第40期:“影子經紀人”發布漏洞訂閱服務,下一次的全球安全事件會在近期接踵而至嗎?
  下一篇:go  茅台雲商大屏震撼展映數博會 | 袋鼠雲聯合中國美院傾力打造