wiki page to upgrade
Closed this issue · 7 comments
Hi,
your wiki is a bit elusive. You could have put which conditional breakpoint to write. At least in C++, you need to understand the whole code to actually make a accurate and correct conditional breakpoint. Since js is way more elliptic than C++, which expression is used to actually call encrypt?
And where does the printscreen come from with cipher? How did you make that appear?
Hi,
Thanks for your feedback, I'll make a new pass to make it a little bit more clearer and go back to you.
But be aware that being too precise (ex: giving a line number etc.) would make the wiki obsolete as soon as the player code change.
Anyway, the keys are floating on the internet so you can also find them with your favorite search engine.
I totally understand the problem of begin to precise and being obsolete. But Here, I wouldn't know which expression to actually evaluate, and I don't say the line number of course since we are speaking about conditional breakpoint.
So the keys are not different from one account to another?
The DZR_AES
and DZR_CBC
keys (for URL generation and track decipher) are the same for everybody.
The only user-specific variable is your DZR_SID.
@boistordu I updated the wiki : https://github.com/yne/dzr/wiki
- Added a diagram (it's nice to have some visual)
- a better explanation of each keys scopes (eg. only DZR_SID is unique to your account)
- some browser recommendation for the debug procedure
Let me know if some steps are still too obscure, I'll try to make them clearer.
Ow, I understand now why you were saying that it could be found on internet.
I m' going to review your diagram and maybe add some more specific things that an average people should have to be able to use your soft
Don't hesitate to re-open a new issue if it's still unclear.
So I've looked a little bit and apparently you didn't understand what I meant before.
It was not really the conceptual form that was causing problem it was the technical manipulations that you didn't specify.
For example:
Let's have a conditional breakpoint on the resolver when it resolve 'encrypt'
that doesn't mean anything in terms of practical thing. Yes put a conditional breakpoint, okey.
But the function is that long :
resolve: function(t) {
var x, n = t[_0x5197("0x130")], r = t[_0x5197("0x131")], e = t.id, i = t[_0x5197("0x132")];
return x = [i, r, e, t[_0x5197("0x92")]][_0x5197("0x30")]("¤"),
x = d[_0x5197("0x88")][_0x5197("0x133")](x) + "¤" + x + "¤",
x += "\0".repeat(x[_0x5197("0x9")] % 16 ? 16 - x[_0x5197("0x9")] % 16 : 0),
x = Array[_0x5197("0xc9")](x)[_0x5197("0x11b")](function(t) {
return t.charCodeAt(0)
}),
x = (x = N[_0x5197("0x120")][_0x5197("0x3d")](x)).reduce(function(t, x) {
return t + "0"[_0x5197("0x23")](x.toString(16))[_0x5197("0x2d")](-2, 2)
}, ""),
n[_0x5197("0xcb")](_0x5197("0x134"), i[0]) + x
}
We don't know if we need to put it at the call of the method "resolve" or the specific line where you are making appear the subwindow on your screenshot
We don't know either which condition to put. Yeah put a condition breakpoint on a pointer in C++ because you need to know which address it's point to or which value it points too or evaluate if the variable x is under or sup to 0 that's totally feasible(it's an example don't take it literally). But you just say 'encrypt', that's not a condition. So what's the expression to evaluate?
I'm stopping to that for now because I want to go through point by point with you.
Don't forget that everybody doesn't have a profound understanding of the JS language. And so you have IT people, just linux user etc. So that's not a common thing to put a condition breakpoint somewhere in the code. It can be already difficult to understand for someone tobe able to evaluate an expression and the concept of what's an expression but here we are not even talking about expression.
Because we are talking about something far more complex.
Normally when calling a method it should be name_of_function(parameters);
that's its primary form of being called and that supposed that the function has been declared somewhere with function name(parameters){code}
Here for the average guy if it goes to the js docs he won't even understand because we are shortcircuit the thing by allocation to the function a name since it is something var x=function(param){code}
and then x is using as the shortcut to that function but normally we should still use x(param)
. But here it goes even further since they are calling a method/function by linking a function to a key name which is resolve
here but the same logic applies to cipher
. I didn't analyze the code in deep but I guess it's because it's one part of the bigger object which is the player. Anyway it's not important, the important fact is that I don't think that a lot of people would know what to put in the conditional breakpoint as value to watch.
My whole explanation here, and sorry if it was a bit long but it was to show you that something you consider maybe as clarity, is maybe not for everyone for those technical reasons I gave.
So could you extrapolate on that in the wiki please?
@boistordu
I updated the wiki, I'm waiting for your feedback