Open dark-spider opened 3 years ago
It appears to be signing a data packet during the login process.
Please attach the contents of this file: http://192.168.0.1/webpages/js/su/data/data.min.1601019620091.js
Hope it helps for you data.min.1601019620091.zip
Try this script: C6 Test Script that attempts to login and retrieve a list of connected devices. Remember to replace the username and password with your appropriate login data.
Let me know if it works successfully.
Note: For Error: No module named 'Crypto'
pip3 install pycryptodome
I tried, but without success
[C6] Loading wireless clients...
Retrieving auth tokens...
Couldn't fetch auth tokens! Response was: %s {"data":""}
An unknown error happened while fetching data
Logging out of router admin interface...
dict_keys([])
(I added A.last_results = {}
to prevent error in #4 )
content of http://192.168.0.1/webpages/js/su/data/data.min.1596185370610.js :
!function(t){t.su.Proxy=function(e){var r=t.extend({xtype:"proxy",url:null,async:!0,timeout:15e3,reader:{url:null,root:"data",type:null,timeout:null},writer:{url:null,root:"data",type:null,timeout:null},type:"POST",dataType:"json",eventId:null,encrypt:!0},e);r.reader.url=r.reader.url||r.url,r.reader.type=r.reader.type||r.type,r.reader.timeout=r.reader.timeout||r.timeout,r.reader.type=r.reader.type.toUpperCase(),r.writer.url=r.writer.url||r.url,r.writer.type=r.writer.type||r.type,r.writer.timeout=r.writer.timeout||r.timeout,r.writer.type=r.writer.type.toUpperCase(),t.extend(this,r),this.isProxy=!0},t.su.Proxy.prototype.read=function(e,r,a,n,o,i){e=t.extend({operation:"read"},e);var s=i||this;return s.encrypt&&(e=t.su.encryptor.dataEncrypt(t.param(e,!0),s.isLogin)),t.ajax({url:s.reader.url,type:s.reader.type,timeout:s.reader.timeout,dataType:s.dataType,async:s.async,cache:!1,data:e,traditional:!0,success:function(e,n,d){if(s.encrypt){if(""==e||e&&"string"!=typeof e.data)return;try{e=JSON.parse(t.su.encryptor.dataDecrypt(e.data))}catch(u){t.encrypt.encryptManager.cleanStorage(),location.href="/"}}e.success?s.callbackSuccess(e,r,o,"read",n,d,i):s.callbackFail(e,a,o,"read",n,d,i),s.eventId&&t.su.app.runningModule.fire(s.eventId)},error:function(e,r,a){s.callbackError(n,o,"read",i,e,r,a),s.eventId&&t.su.app.runningModule.fire(s.eventId)}})},t.su.Proxy.prototype.write=function(e,r,a,n,o,i){e=t.extend({operation:"write"},e);var s=i||this;return s.encrypt&&(e=t.su.encryptor.dataEncrypt(t.param(e,!0),s.isLogin)),t.ajax({url:s.writer.url,type:s.writer.type,timeout:s.writer.timeout,dataType:s.dataType,cache:!1,async:s.async,data:e,traditional:!0,success:function(e,n,d){if(s.encrypt){if(""==e||e&&e.data==undefined)return;try{e=JSON.parse(t.su.encryptor.dataDecrypt(e.data))}catch(u){t.encrypt.encryptManager.cleanStorage(),location.href="/"}}e.success?s.callbackSuccess(e,r,o,"write",n,d,i):s.callbackFail(e,a,o,"write",n,d,i),s.eventId&&t.su.app.runningModule.fire(s.eventId)},error:function(e,r,a){s.callbackError(n,o,"write",i,e,r,a),s.eventId&&t.su.app.runningModule.fire(s.eventId)}})},t.su.Proxy.prototype.callbackSuccess=function(e,r,a,n,o,i,s){var d=s||this,u=(r=r||function(){},a=!1!==a,"read"==n?d.reader.root:d.writer.root),l="ev_"+n,p=null;p=u?e[u]:e,r.call(d,p,e.others,o,i),a&&t(d).trigger(l,[p,e.others,o,i])},t.su.Proxy.prototype.callbackFail=function(e,r,a,n,o,i,s){var d=s||this;r=r||function(){};switch(e.errorcode){case"timeout":t.encrypt.encryptManager.cleanStorage(),location.href="/";break;case"user conflict":t.su.app&&t.su.app.errorOperation&&t.su.app.errorOperation.userConflict&&t.su.app.errorOperation.userConflict();break;case"permission denied":t.su.app&&t.su.app.errorOperation&&t.su.app.errorOperation.denied&&t.su.app.errorOperation.denied()}r.call(d,e.errorcode,e.others,e.data),t(d).trigger("ev_failed",[e.errorcode,e.others,e.data])},t.su.Proxy.prototype.callbackError=function(e,r,a,n,o,i,s){var d=n||this,u=(e=e||function(){},"read"==a?d.reader.url:d.writer.url);d.preventErrorDefault,"read"==a?e.call(d,o,i,s,u):e.call(d,o,i,s),t(d).trigger("ev_error",[o,i,s,u])}}(jQuery),function(t){t.su.Store=function(e){var r={updateMode:e.updateMode||"operation",insertMode:e.insertMode||e.updateMode||"operation",removeMode:e.removeMode||e.updateMode||"operation"},a=t.extend({},{fields:null,xtype:"store",proxy:null,autoLoad:!1,tag:"store",global:!1,keyProperty:"key",updateMode:"operation",insertMode:"operation",removeMode:"operation",keyLength:0},e,r);return a.proxy?!0!==a.proxy.isProxy&&(a.proxy=new t.su.Proxy(a.proxy)):a.autoLoad=!1,a.fields&&0!==a.fields.length&&(1!=a.global||a.id)?(this.id=a.id||t.su.randomId("store"),void this.init(a)):null},t.su.Store.prototype.init=function(e){t.extend(this,e),this.data=[],this.snapshot=null,this.isStore=!0,this.isSorted=!1,!0===this.autoLoad&&this.load(),t(this).on("ev_datachanged",function(t,e,r){this.isSorted=!1}),t.su.storeManager.add(this)},t.su.Store.prototype.getData=function(t){var e=this.data;this.keyProperty;if(!t)return undefined;var r=this.getIndex(t);return r==undefined?undefined:e[r]},t.su.Store.prototype.getDataByIndex=function(t){return this.data[t]},t.su.Store.prototype.getIndex=function(t){var e=this.data,r=this.keyProperty;if(t==undefined)return undefined;for(var a=0,n=e.length;a<n;a++)if(e[a][r].toString()==t.toString())return a;return undefined},t.su.Store.prototype.getKeyByIndex=function(t){var e=this.data,r=this.keyProperty;return e[t][r]},t.su.Store.prototype.getIndexs=function(t){var e=this.data,r=this.keyProperty;if(0==t.length)return undefined;for(var a=[],n=0,o=t.length;n<o;n++)for(var i=0,s=e.length;i<s;i++){var d=t[n];if(e[i][r].toString()==d.toString()){a.push(i);break}}return a},t.su.Store.prototype.insert=function(e,r,a,n,o){e=e==undefined||null==e?r.length-1:e;var i=this,s={};s[this.keyProperty]="add",this.proxy.write(t.extend(s,{operation:"insert",index:e},r),function(r,n,o,s){t.isArray(r)||(r=[r]),r=i.dataFormat(r),"operation"==i.insertMode?i.insertData(e,r,function(t,e){a&&a.call(i,t,e)}):"complete"==i.insertMode?i.loadData(r,n,!1,function(t){a&&a.call(i,t,n,o,s)}):i.load({},function(t,e,r,n){a&&a.call(i,t,e,r,n)})},function(e,r){n&&n.call(i,e,r),t(i).trigger("ev_failed",["insert",e,r])},function(e,r,a){o&&o.call(i,e,r,a),t(i).trigger("ev_error",["insert",e,r,a])})},t.su.Store.prototype.load=function(e,r,a,n){var o=this;e=e||{};this.proxy.read(t.extend({operation:"load"},e),function(e,a,n,i){e=o.dataFormat(e),o.loadData(e,a,!1,function(t){r&&r.call(o,t,a,n,i)}),t(o).trigger("ev_load",[o,e])},function(e,r){a&&a.call(o,e,r),t(o).trigger("ev_failed",["load",e,r])},function(e,r,a){n&&n.call(o,e,r,a),t(o).trigger("ev_error",["load",e,r,a])})},t.su.Store.prototype.update=function(e,r,a,n,o){var i=this.keyProperty;if(e!=undefined&&null!=e){var s=this.getIndex(e),d={},u=this;d[i]=e,this.proxy.write(t.extend({operation:"update",index:s},d,r),function(r,n,o,i){t.isArray(r)||(r=[r]),t.extend(r,d),r=u.dataFormat(r),"operation"==u.updateMode?u.updateData(e,r,function(t,e){a&&a.call(u,t,e)}):"complete"==u.updateMode?u.loadData(r,n,!1,function(t){a&&a.call(u,t)}):u.load({},function(t,e,r,n){a&&a.call(u,t,e,r,n)}),t(u).trigger("ev_update",[u,r])},function(e,r){n&&n.call(u,e,r),t(u).trigger("ev_failed",["update",e,r])},function(e,r,a){o&&o.call(u,e,r,a),t(u).trigger("ev_error",["update",e,r,a])})}},t.su.Store.prototype.updateColumns=function(e,r,a,n,o){var i=this;r=r||{};this.proxy.read(t.extend({operation:"updateColumn",columns:e},r),function(r,n,o,s){for(var d=0;d<i.data.length;d++)for(var u=0;u<r.length;u++)if(i.data[d].key==r[u].key)for(var l=0;l<e.length;l++)i.data[d][e[l]]=r[u][e[l]];for(d=0;d<i.snapshot.length;d++)for(u=0;u<r.length;u++)if(i.snapshot[d].key==r[u].key)for(l=0;l<e.length;l++)i.snapshot[d][e[l]]=r[u][e[l]];a&&a.call(i,r,n,o,s),t(i).trigger("ev_updatecolumns",[e,r])},function(e,r){n&&n.call(i,e,r),t(i).trigger("ev_failed",["updatecolumns",e,r])},function(e,r,a){o&&o.call(i,e,r,a),t(i).trigger("ev_error",["updatecolumns",e,r,a])})},t.su.Store.prototype.remove=function(e,r,a,n,o){var i=this,s=this.keyProperty;t.isArray(e)||(e=[e]);var d=this.getIndexs(e);this.proxy.write(t.extend({operation:"remove",key:e,index:d},r),function(t,e,r,n){if("operation"==i.removeMode){if(t.length>0)if(t[0][s]){for(var o=[],d=0,u=t.length;d<u;d++)if(t[d].success){var l=t[d][s];o.push(l)}i.removeDataByKey(o)}else{var p=[],c=0;for(u=t.length;c<u;c++)if(t[c].success){d=t[c]["index"];p.push(parseInt(d,10))}i.removeDataByIndex(p)}a&&a.call(i,o,p,t)}else"complete"==i.removeMode?(t=i.dataFormat(t),i.loadData(t,e,!1,function(t){a&&a.call(i,t,e)})):i.load({},function(t,e,r,n){a&&a.call(i,t,e,r,n)})},function(e,r){n&&n.call(i,e,r),t(i).trigger("ev_failed",["remove",e,r])},function(e,r,a){o&&o.call(i,e,r,a),t(i).trigger("ev_error",["remove",e,r,a])})},t.su.Store.prototype.dataFormat=function(e){var r=this.fields,a=this.keyProperty;t.su.format;e&&!t.isEmptyObject(e)||(e=[]),t.isArray(e)||(e=[e]);for(var n=[],o=!1,i=0;i<r.length;i++){for(var s=r[i].name,d=(r[i].type,r[i].mapping||s),u=r[i].defaultValue||undefined,l=r[i].dataFormat?r[i].dataFormat:function(t){return t},p=0;p<e.length;p++){n[p]=n[p]||{};var c=e[p][d],h=l(c===undefined||null===c?u:c);n[p][s]=h}a==name&&(o=!0)}if(!o)for(p=0;p<e.length;p++){n[p]=n[p]||{};var y=e[p][a];n[p][a]=y===undefined||null===y?"key-"+(p+this.keyLength):y}return this.keyLength+=e.length,n},t.su.Store.prototype.insertData=function(e,r,a){var n=this.data;if(e>n.length)return!1;t.isArray(r)||(r=[r]);var o=n.slice(0,e),i=n.slice(e,n.length),s=o.concat(r,i);return this.data=null,delete this.data,this.data=s,this.snapshot=null,delete this.snapshot,this.snapshot=t.su.clone(this.data),a&&a.call(this,e,r),t(this).trigger("ev_insertdata",[e,r]),t(this).trigger("ev_datachanged",[this,this.data,"insertData"]),this},t.su.Store.prototype.loadData=function(e,r,a,n){return!a&&this.data.length>0&&this.removeAllData(),e&&!t.isEmptyObject(e)||(e=[]),t.isArray(e)||(e=[e]),this.data=this.data||[],this.data=this.data.concat(e),this.snapshot=null,delete this.snapshot,this.snapshot=t.su.clone(this.data),n&&n.call(this,e,a),t(this).trigger("ev_loaddata",[this.data,r]),t(this).trigger("ev_datachanged",[this,this.data,"loadData"]),this},t.su.Store.prototype.updateData=function(e,r,a){r&&!t.isEmptyObject(r)||(r=[]),t.isArray(r)&&(r=r[0]);var n=this.getIndex(e);if(n!==undefined&&null!==n)return this.data.splice(n,1,r),this.snapshot=null,delete this.snapshot,this.snapshot=t.su.clone(this.data),a&&a.call(this,e,r),t(this).trigger("ev_updatedata",[e,n,r]),t(this).trigger("ev_datachanged",[this,this.data,"updateData"]),this},t.su.Store.prototype.removeDataByKey=function(e,r){var a=this.keyProperty;t.isArray(e)||(e=[e]);for(var n={},o=0,i=e.length;o<i;o++)n[e[o]]=!0;var s=this.data,d=[];for(o=0,i=s.length;o<i;o++)s[o][a]in n&&d.push(o);this.removeDataByIndex(d,function(t,e){r&&r.call(this,t,e)})},t.su.Store.prototype.removeDataByIndex=function(e,r){var a=this.keyProperty,n=this.data;t.isArray(e)||(e=[e]),e.sort(function(t,e){return t-e});for(var o=[],i=e.length-1;i>=0;i--){var s=e[i];isNaN(s)||(o.push(n[s][a]),n.splice(e[i],1))}return this.snapshot=null,delete this.snapshot,this.snapshot=t.su.clone(this.data),r&&r.call(this,o,e),t(this).trigger("ev_removedata",[o,e]),t(this).trigger("ev_datachanged",[this,this.data,"removeData"]),this},t.su.Store.prototype.removeAllData=function(e){return this.data=null,delete this.data,this.data=[],this.snapshot=null,t(this).trigger("ev_removeAllData",[this]),t(this).trigger("ev_datachanged",[this,this.data,"removeData"]),this}}(jQuery),function(t){t.su.TreeStore=function(e){var r=t.extend({},{proxy:null,fields:[{name:"name"},{name:"path"},{name:"hasBranch"},{name:"branches"},{name:"leavesInfo"},{name:"leaves"},{name:"uuid"}],keyProperty:"path"},e),a=new t.su.Store(r);return a.getNode=function(t){return this.map&&this.map[t]?this.map[t]:undefined},a.loadNode=function(e,r,a){var n=this,o=n.getNode(e);if(o){var i=o.path,s=t.extend({operation:"read",path:i},r);n.proxy.read(s,function(r,o,i){a&&a.call(n,r,o,i),(t.isArray(r.branches)||t.isArray(r.leaves))&&(n.map[e].branches=r.branches,t(n).trigger("ev_datachanged",[n,"loadNode"]),t(n).trigger("ev_loadnode",[n,e,r]))})}},a.updateMap=function(){var t=this,e=t.data[0];if(e){var r={};r[e[t.keyProperty]]=e;var n=function(e){if(e.branches)for(var o=0,i=e.branches.length;o<i;o++){var s=e.branches[o];a.mapId++,r[s[t.keyProperty]]=s,n(s)}};n(e),a.map=r}},t(a).on("ev_datachanged",a.updateMap),a}}(jQuery);
this is what I see after logging in:
fetch("http://192.168.0.1/cgi-bin/luci/;stok=327adcfd4503a093fb3959008eda6ea9/admin/system?form=sysmode", {
"headers": {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "en,cs;q=0.9,en-GB;q=0.8,en-US;q=0.7",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"x-requested-with": "XMLHttpRequest"
},
"referrer": "http://192.168.0.1/webpages/index.1596185370610.html",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": "sign=617a5aa767e3469a026d7ea7de4a259ac2e5e77b2d76c40383e602ef90df92d97a4b9bc9a5d9f46382cd2e3c897a8f3653cf66f05ebbd20eb2c5093373697946&data=qQ0vdwJb1QqqGFjz9%2FLm2Q%3D%3D",
"method": "POST",
"mode": "cors",
"credentials": "include"
});
Hey all, I adapted the test script to work with Deco X90. They changed quite a lot, everything is "encrypted" (quotations because the way the use RSA & AES seems fairly random): https://gist.github.com/rosmo/29200c1aedb991ce55942c4ae8b54edd
hi any update on adding support for Tp-Link router archer c6?
Hi @rosmo, I forked Your gist since the datastructure has slightly changed again. Do You, by any chance, know how to get the auth tokens? Logging in with signature and data just returns HTTP 200 with empty value :(
response = requests.post(
url, params={'form': 'login'},
data={'sign': signature, 'data': ciphertext_base64},
headers={
REFERER: referer,
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest" # This header is required for sure
})
try:
result = response.json().get('data')
result
then contains '{"data":""}'
.
I believe this might be relevant for some of you: there is https://openwrt.org/toh/tp-link/archer_c6_v2 which can be just flashed over the default firmware without any issues. And for device tracking there is simply https://www.home-assistant.io/integrations/luci/ which works much more reliably (as it's all OSS). I regret I haven't flashed that router years ago.
If you are still looking for a client for Archer C6 v2.0 - I have the client https://github.com/AlexandrErohin/TP-Link-Archer-C6U and Home Assistant Integration https://github.com/AlexandrErohin/home-assistant-tplink-router
Hello Please help me to add support for my model of Tp-Link router
Login Internet Wireless Advanced Network Internet DHCP Server Wireless Wireless Settings Logout archer_c6.zip