【JS逆向】聚享游RSA | 每日J(rèn)S

已遷移平臺(tái):segmentfault洽沟,搜索 erma0
換平臺(tái)了,簡書發(fā)什么都鎖定裆操,廣告一堆,趁早倒閉吧踪区。


第一天

JavaScript逆向練習(xí)1

0x01 目標(biāo)網(wǎng)址

http://www.juxiangyou.com/login/index

0x02 定位JS

1. 隨便輸入賬號(hào)密碼驗(yàn)證碼,點(diǎn)擊登錄静尼,查看提交的參數(shù)

1

可以看到传泊,發(fā)出了兩個(gè)請(qǐng)求,第一個(gè)是獲取key眷细,第二個(gè)是登錄,在登錄包里有加密過 的password參數(shù)薪鹦。

2. Ctrl+Shift+F調(diào)出搜索面板惯豆,搜索jxy_parameter,有三條結(jié)果楷兽,依此打開查看华临,發(fā)現(xiàn)第三個(gè)才是需要的芯杀。直接在這里下一個(gè)斷點(diǎn)雅潭。

2

3. 重新輸入賬號(hào)密碼驗(yàn)證碼,點(diǎn)擊登錄扶供,JS被斷了下來。F11跟進(jìn)太援,或者鼠標(biāo)懸停在斷點(diǎn)處函數(shù)名上,點(diǎn)擊彈出的內(nèi)容提岔,也能跳轉(zhuǎn)進(jìn)去。

3

這里可以看到e就是之前的第一個(gè)請(qǐng)求包的返回內(nèi)容碱蒙,而n就是待加密的明文密碼夯巷。加密函數(shù)的調(diào)用核心就是在這里赛惩。

4. 同上趁餐,F(xiàn)11跟進(jìn),進(jìn)入一個(gè)JSEncrypt.min.js澎怒,傳入?yún)?shù)為第一步返回的hash + 明文密碼

4

這里一看到JSEncrypt,再看一下上下文星瘾,可以確認(rèn)是AES加密(可以百度一下JSEncrypt),那就直接把整個(gè)JSEncrypt.min.js拿走惧辈,再改寫一個(gè)調(diào)用的函數(shù)就行了。

0x03 改寫JS

1. 仿照?qǐng)D3的位置盒齿,寫一個(gè)調(diào)用函數(shù)困食。

function getrsa(pKey, password) { // 也可以把key寫死,這個(gè)公鑰是不會(huì)變的
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(pKey);
    var encrypted = encrypt.encrypt(password);
    return encrypted
}

此時(shí)在多數(shù)情況下就能正常運(yùn)行了硕盹。

2. 練習(xí)在Python中調(diào)用時(shí)發(fā)現(xiàn)叨咖,這樣會(huì)報(bào)錯(cuò)JSEncrypt is not defined瘩例,一下整懵了甸各,嘗試直接賦值一個(gè)空對(duì)象,結(jié)果不行趣倾,仔細(xì)看了一下代碼,發(fā)現(xiàn)第一部分是在判斷客戶端儒恋。

! function(t, e) {
    "function" == typeof define && define.amd ? define(["exports"], e) : e("object" == typeof exports && "string" != typeof exports.nodeName ? module.exports : t)
}(this, function(t) {**函數(shù)主體**});

瀏覽器中調(diào)試發(fā)現(xiàn)"function" == typeof define && define.amdtrue,那就直接把函數(shù)給改一下,把函數(shù)主體暴露出來瘟仿。

var JSEncryptExports = {};
(function(t) { 
    **函數(shù)主體**
})(JSEncryptExports);
var JSEncrypt = JSEncryptExports.JSEncrypt;

此時(shí)JSEncrypt就是一個(gè)構(gòu)造函數(shù)了,接著把上面5中的代碼貼在下面劳较,就可以在Python中運(yùn)行了。

0x04 Python代碼

一開始嘗試了js2py观蜗,報(bào)錯(cuò),可能是js代碼比較多墓捻,所以又直接改用execjs了。

PS. 其實(shí)可以嘗試直接調(diào)用Python的AES加密庫砖第,如果這個(gè)JS沒改過,結(jié)果應(yīng)該是能用的(也就是另一個(gè)思路:JS功能可以通過所使用的語言直接實(shí)現(xiàn))放吩。

# -*- encoding: utf-8 -*-
'''
@File    :   0x01-juxiangyou.com.py
@Time    :   2019/11/06 10:42:43
@Author  :   獨(dú)孤孤獨(dú)嘟咕嚕犢子
@Version :   1.0
@Link    :   http://www.reibang.com/u/6a4c6ef97be7
@Desc    :   聚享游www.juxiangyou.com 登錄例子
'''

# start

import execjs
import requests
import time
import json

HEADERS = {
    'User-Agent':
    'Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; Mi Note 2 Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.1.1'
}
s = requests.Session()
s.headers.update(HEADERS)
imageURL = 'http://www.juxiangyou.com/verify?v={}000'.format(int(time.time()))
keyURL = 'http://www.juxiangyou.com/login/getkey'
loginURL = 'http://www.juxiangyou.com/login/auth'

# 下載驗(yàn)證碼
image = s.get(imageURL).content
with open('image.png', 'wb') as f:
    f.write(image)

# 獲取公鑰
publicKey = s.post(keyURL).json()
jskey = publicKey['key']
jshash = publicKey['hash']

# 登錄
username = 'ermao6@qq.com'
password = '******'
varifyCode = input('請(qǐng)輸入驗(yàn)證碼(當(dāng)前目錄下image.png):')
# varifyCode = '1111'
timestamp = int(time.time() * 1000)

with open('js/0x01-juxiangyou.com.js') as f:  # 坑0x01 相對(duì)路徑前面不帶/羽杰,帶/不報(bào)錯(cuò)但讀不出數(shù)據(jù)
    jscode = f.read()
ctx = execjs.compile(jscode)  # execjs載入js代碼
xsign = ctx.call('get', timestamp)  # 坑0x02 這里傳入的時(shí)間戳為整數(shù)型(老版本驗(yàn)證的參數(shù)到推,現(xiàn)在不計(jì)算也行)
# xsign = ctx.eval('get({})'.format(timestamp))  # 通過eval調(diào)用js代碼里的函數(shù)
enPass = ctx.call('getrsa', jskey, jshash + password)  # 通過call調(diào)用js代碼里的函數(shù)
data = {
    'jxy_parameter':  # 坑0x03 提交json格式參數(shù)需要轉(zhuǎn)成json字符串,否則請(qǐng)求失敗
    json.dumps({
        "c": "index",
        "fun": "login",
        "account": username,
        "password": enPass,
        "verificat_code": varifyCode,
        "is_auto": True
    }),
    'timestamp':
    timestamp
}
result = s.post(loginURL, data=data).json()
print(result)  # {'code': 10000} 登錄成功
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末莉测,一起剝皮案震驚了整個(gè)濱河市集灌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欣喧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唆阿,死亡現(xiàn)場離奇詭異,居然都是意外死亡驯鳖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門扭弧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽捻,你說我怎么就攤上這事∮眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵厚满,是天一觀的道長碧磅。 經(jīng)常有香客問我,道長鲸郊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任严望,我火速辦了婚禮,結(jié)果婚禮上像吻,老公的妹妹穿的比我還像新娘复隆。我一直安慰自己姆涩,他們只是感情好挽拂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布骨饿。 她就那樣靜靜地躺著,像睡著了一般宏赘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上察署,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音脐往,去河邊找鬼。 笑死扳埂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阳懂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酝蜒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亡脑,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霉咨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體途戒,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年唁毒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浆西。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖近零,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情久信,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布入篮,位于F島的核電站,受9級(jí)特大地震影響潮售,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酥诽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咖驮。 院中可真熱鬧,春花似錦训枢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩拙。三九已至,卻和暖如春耸采,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虾宇。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留好唯,地道東北人竭沫。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓骑篙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親靶端。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谎势,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,103評(píng)論 1 32
  • 注:2.0 已經(jīng)有社區(qū)翻譯的中文文檔 脏榆。如果對(duì)自己英文有信心台谍,建議直接閱讀英文文檔须喂。此指南僅供參考趁蕊,請(qǐng)根據(jù)自身實(shí)際...
    peterqi閱讀 1,442評(píng)論 0 6
  • 山間路上坞生,一道一僧迎面相逢掷伙,互不相識(shí),相互問訊任柜。擦肩過后卒废,僧停步轉(zhuǎn)身宙地。 僧問:道大佛大摔认?道高佛高宅粥? 道長答:你把他...
    付海霞_3107閱讀 102評(píng)論 0 0
  • 《海邊的曼徹斯特》是預(yù)計(jì)未來五年內(nèi)將橫掃互聯(lián)網(wǎng)行業(yè)的亞馬遜帝國去年出品的劇情題材電影。我看完了粹胯,我難過了辰企。法律證明...
    2ihuatanejo閱讀 332評(píng)論 0 0