26/04/2016

Exploring Qualcomm's Secure Execution Environment

Welcome to a new series of blog posts!

In this series, we'll dive once more into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world of TrustZone, and explore a new chain of vulnerabilities and corresponding exploits which will allow us to elevate privileges from zero permissions to code execution in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel.

This may sound familiar to those of you who have read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous series - but let me reassure you; this series will be much more exciting!

First of all, this exploit chain features a privilege escalation which is universal across all Android versions and phones (and which requires zero permissions) and a TrustZone exploit which affects a very wide variety of devices. Secondly, we will dive deep into an as-of-yet unexplored operating system - QSEE - Qualcomm's Secure Execution Environment. Lastly, we'll see some interesting TrustZone payloads, such as directly extracting a real fingerprint from TrustZone's encrypted file-system.

In case you would like to follow along with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 symbols and disassembled binaries, I will be using my own Nexus 6 throughout this series, with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following fingerprint:
    google/shamu/shamu:5.1.1/LMY48M/2167285:user/release-keys 

You can find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact factory image here.

 

 

Oh say can QSEE


In this blog post, we'll explore Qualcomm's Secure Execution Environment (QSEE).

As we've previously discussed, one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main reasons for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 inclusion of TrustZone on devices is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to provide a "Trusted Execution Environment" (TEE) - an environment which should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretically allow computation which cannot be interfered with from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 regular operating system, and is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore "trusted".

This is achieved by creating a small operating system which operates solely in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Secure World" facilitated by TrustZone. This operating system provides a small number of services directly in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form of system calls which are handled by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel (TZBSP) itself. However, in order to allow for an extensible model where "trusted" functionality can be added, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel can also securely load and execute small programs called "Trustlets", which are meant to provide a secure service to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 insecure ("Normal World") operating system (in our case, Android).




There are several such Trustlets commonly used on devices:
  • keymaster - Implements cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key management API provided by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Android "keystore" daemon. It can securely generate and store cryptographic keys and allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 users to operate on data using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se keys.
  • widevine - Implementation of Widevine DRM, which allows "secure" playback of media on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device.
In fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are many more DRM related trustlets, depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OEM and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se two trustlets are universally used.

Where do we start?


Naturally, one place to start would be to look at a trustlet of our choice, and to try and understand what makes it tick. Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "widevine" module is one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most ubiquitous, we'll focus on it.

Searching briefly for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 widevine trustlet itself in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device's firmware reveals cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:


Apparently cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet is split into a few different files... Opening cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files reveals a jumbled up mess - some files contain what looks like code, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs contain ELF headers and metadata. In any case, before we can start disassembling cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet, we need to make some sense out of this format. We can eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r do this by opening each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files and guessing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meaning of each blob, or by following cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code-paths responsible for loading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet - let's try a little of both.

Loading a Trustlet


In order to load a trustlet from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Normal World", applications can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 libQSEECom.so shared object, which exports cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function "QSEECom_start_app":


Unfortunately this library's source code is not available, so we'll have to reverse engineer cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function's implementation to find out what it does. Doing so reveals that it performs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following operations:
  • Opens cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 /dev/qseecom device and calls some ioctls to configure it
  • Opens cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file associated with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet and reads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first 0x34 bytes from it
  • Calculates cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of ".bXX" files using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 0x34 bytes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt"
  • Allocates a physically continuous buffer (using "ion") and copies cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" and ".bXX" files into it
  • Finally, calls a ioctl to load cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet itself, using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 allocated buffer
So, still no luck on exactly how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 images are loaded, but we're getting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

First of all, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number 0x34 might look familiar - this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 size of a (32 bit) ELF header. Opening cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MDT file reveals that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first 0x34 bytes are indeed a valid ELF header:


Moreover, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "QSEECOM_start_app" function we just had a look at used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 word at offset 0x2C in order to calculate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of ".bXX" files. As you can see above, this corresponds to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "e_phnum" field in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ELF header.

Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "e_phnum" field is usually used to specify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of program headers, this hints that perhaps each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files contains single segment of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet. Indeed, opening each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files reveals content cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 seems like it may be a segment of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program being loaded... But in order to make sure, we'll need to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program headers cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves (and see if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y match cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files).

Looking furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next few chunks in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file are in fact cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program headers cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves, one for each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files present.


And, confirming our earlier suspicion, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir sizes match cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sizes of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files exactly. Great!

Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first two program headers above look a little strange - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are both NULL-type headers, meaning cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are "reserved" and should not be loaded into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resulting ELF image. Strangely, opening cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 corresponding ".bXX" files reveals that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first block contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same ELF header and program headers present in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt", and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second block contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file.

In any case, here's a short schematic summing up what we know so far:



Also, note that since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ELF header and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program headers are all present in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt", we can use "readelf" in order to quickly dump cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information about program headers in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet:




At this point we have all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information we need in order to create a complete and valid ELF file from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" and ".bXX" files; we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ELF header and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program headers, as well as each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 segments cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves. We just need to write a small script that will create an ELF file using this data.

I've written a small python script which does just that. You can find it here:

https://github.com/laginimaineb/unify_trustlet

Reflections on Trusting Trustlets

 

By now have a basic understanding of how trustlets are assembled into an executable file, but we still don't know how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are verified. However, since we know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files contain only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 segments to be loaded, this means that this data must reside in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file.

So it's time for some guesswork - if we were to build a trusted loader, how would we do it?

One very common paradigm would be to use hash-and-sign (relying on a CRHF and a digital signature). Essentially - we calculate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data to be aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated and sign it using a private key for which a corresponding public key is known to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 loader.

If that were cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case, we'd expect to find two things in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt":
  • A certificate chain
  • A signature blob
Let's start by looking for a certificate chain. There are way too many formats for certificates, but since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file only contains binary data, we can assume it'll probably be a binary format, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most common of which is DER.

There's a quick hack we can use to find DER encoded certificates - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y almost always start with an "ASN.1 SEQUENCE" blob, which is encoded as: 0x30 0x82. So let's search for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se two bytes in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" and save each found blob into a file. Now, we can check if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se blobs are well-formed certificates using "openssl":


Yup, we guessed correctly - those are certificates.

In fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet contains three certificates, one after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. Just for good measure, we might also want to check that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se three certificates are in fact a certificate chain which forms a valid chain of trust. We can do this by dumping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificates to a single "certificate chain" file and using "openssl" to verify each certificate using this chain:


As for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root of trust of this chain - looking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root certificate in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chain reveals cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same root certificate which is used to verify all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r parts of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 boot chain in Qualcomm's "Secure Boot" process. There has been some research about this mechanism, which has shown that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 validation occurs by comparing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SHA256 of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root certificate to a special value called "OEM_PK_HASH", which is "fused" into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 devices QFuses during cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 production process. Since this value should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretically not be modifiable after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 production of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device, this means that forging such a root certificate would essentially require a second pre-image attack against SHA256.

Now, let's get back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" - we've found cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate chain, so now it's time to look for a signature. Normally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private key is used to produce a signature and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key can be used to recover cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signed data. Since we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top-most certificate in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chain, we can use it to go over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file and opportunistically try to "recover" each blob.

But how will we know when we've succeeded?

Recall that RSA is a trapdoor permutation family - every blob with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same number of bits as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public modulus N is mapped to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r blob of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same size.

However, while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 RSA public modulus in our case is 2048 bits long, most hashes are much shorter than that (160 bits for SHA1, 256 bits for SHA256). This means that if we try to "decrypt" a blob using our public key and it happens to end with a lot of "slack" space (for example, zero bytes), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a very good chance that this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature we're looking for (for a completely random permutation, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chance of n consecutive zero bits is 2^-n - extremely small for even a moderate n)

In order to do so, I wrote a small program which loads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top-most certificate in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chain and tries to "recover" each blob in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" (using rsa_public_decrypt with PKCS #1 v1.5 padding). If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "recovered" blob ends with a bunch of zero bytes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program outputs it. So... Running it on our ".mdt":


We've found a signature! Great.

What's more, this signature is 256 bits long, which implies that it may be a SHA256 hash... And if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's one SHA256 in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt", perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are more?



Lucky once again!

As we can see, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SHA256 hashes for each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".bXX" files are also stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt", consecutively. We can also make an educated guess that this will be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data (or at least some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data) that is signed to produce cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature we found earlier.

Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".b01" file's hash is missing - why is that? Remember that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".b01" file contains all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ELF header and program headers. Since this data also contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature above, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature is (possibly) produced over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashes of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block files, this would cause a circular dependency (since changing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block file would change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash, which would change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature, which would again change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block file, etc.). So it makes sense that this block's hash wouldn't be present.

By now we've actually decoded all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file apart from a small structure which resides right after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 program headers. However, after looking at it for a while, we can see that it simply contains pointers and lengths of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various parts of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" that we've already decoded:


So finally, we've decoded all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt"... Phew.


Motorola's High Assurance Boot


Although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file format we've seen above is universal for all OEMs, Motorola decided to add a little twist.

Instead of supplying an RSA signature like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one we saw earlier, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y actually leave cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature blob empty (in fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature I showed you earlier was from a Nexus 5). In fact, Motorola's signature looks like this:


So how is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image verified?

This is done by using a mechanism which Motorola calls HAB ("High Assurance Boot"). This mechanism allows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to verify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" file by appending a certificate chain and a signature over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole ".mdt" to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file, encoded using a proprietary format used by "HAB":


For more information about this mechanism, you can check out this great research by Tal Aloni. In short, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" is hashed and signed using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top-most key in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate chain, while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root certificate in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chain is verified using a "Super Root Key", which is hard-coded in one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bootloader's stages.

 

Life of a Trustlet

After cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 verification process we saw above, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel loads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet's segments into a secure memory region ("secapp-region") which is inaccessible from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Normal World" and assigns an ID to it.

Then, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel switches into "Secure World" user-mode and executes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet's entry function:



As you can see, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet registers itself with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel, along with a "handler function". After registering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet, control is returned to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 loading process finishes.

Now, once cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet is loaded, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Normal World" can send commands to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet by issuing a special SCM call (called "QSEOS_CLIENT_SEND_DATA_COMMAND") containing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 loaded trustlet's ID and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request and response buffers. Here's what it looks like:


The TrustZone kernel (TZBSP) receives cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SCM call, maps it to QSEOS, which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n finds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 given ID and calls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 handler function which was registered earlier (from "Secure World" user-mode) in order to serve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request.




What's Next?


Now that we have some understanding of what trustlets are and how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are loaded, we can move on to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploits! In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next blog post we'll find a vulnerability in a very popular trustlet and exploit it in order to execute code within QSEE.


625 comments:

  1. Great post as always!
    I'm waiting for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next post and in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meanwhile I hope you get some time to release cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code for standalone version (without cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel modification) of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 older trustzone exploit :).

    As I understand from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post, trustlets execute in a separate usermode inside QSEE. Can exploiting a trustlet lead to possible bootloader unlock? Since it's just a QSEE usermode application cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 possibly don't have access privileged instructions like blowing a qfuse right?

    PS: can I know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hex editor you are using? :)

    ReplyDelete
    Replies
    1. I have re-written his original zero-write exploit as a standalone kernel module here: https://github.com/ghassani/qc-tz-es-activated-exploit

      Delete
    2. The hex-editor looks like 010 editor, probably running on linux.

      Delete
    3. Hi Madushan,

      First of all, thank you! Glad you enjoyed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post.

      I totally forgot about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "standalone" version of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 older TZ exploit. In any case, I just cleaned it up a little bit and put it up on github, here: https://github.com/laginimaineb/standalone_msm8974

      It relies on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous kernel exploit (https://github.com/laginimaineb/cve-2014-4322/tree/master/Feud/jni) to get kernel code execution, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n dynamically finds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 needed kernel symbols and does all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work without needing a kernel module.

      You should definitely check out Ghassan's version as well! I just found out about it, but looking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code it looks very clean and easy to use.

      As for your second question - you are absolutely correct. QSEE does not have sufficient privileges in order to blow a QFuse, which means we'll need to go furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than just exploiting QSEE - you'll see all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 details in tomorrow's blog post :)

      Finally, as shuffle2 mentioned below - yes, I am using 010editor on Linux (which I highly recommend! It's a fantastic tool).

      Cheers,
      Gal.

      Delete
    4. Ghassan -

      Just wanted to say thank you for wrapping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploit in an LKM! Great work. The code is really clean and well-written. Kudos :)

      Gal.

      Delete
    5. Great :D Thanks all you guys for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 help and sources. I waiting for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next post.

      Delete
    6. Gal, thank you for that shout out. That means a lot! I love reading your articles, I learn so much from your explanations and examples. Glad that I am able to contribute something to you and your readers. Keep it up, I look forward to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next exploit :)

      Delete
    7. Smadav 2020 | The Smadav 2020 code is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 champion among cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most established antivirus romance, using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 supported Tainting Safety Assurance. If your Computer system accepts malady, Smadav 2020 Download Free remotely will enter your device and determine it. On this occasion, change is unlimited, you will get a full price reduction. Download Smadav Antivirus 2020 for PC

      Delete
  2. Just wanted to drop a note and say: you have done some really great work here.

    I actually needed to implement some signing verification tools for Qualcomm's mdt/mbn format very recently. While I have a full set of docs from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m it was actually reading through this article that got me most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information I needed instead :)

    It is funny how reversers often know more about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nitty gritty details of a company's product than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves seem to.

    I have also been enjoying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 follow up articles on exploitation immensely. Keep up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 great work!

    ReplyDelete
    Replies
    1. Thank you Eric, It means a lot to me!

      More posts coming soon :)

      Delete
  3. Very good! Enjoyed reading it, looking forward to new posts.

    Cheers.

    ReplyDelete
    Replies
    1. I really enjoy simply reading all of your weblogs. Simply wanted to inform you that you have people like me who appreciate your work. Definitely a great post. Hats off to you! The information that you have provided is very helpful.

      Click here
      Go Here
      Click here
      Go Here
      View for more
      Click for more
      Go here
      View for more
      Click here

      Delete
  4. Great post!
    Could this exploit be used on a snapdragon 820? Or is it only limited to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 800 and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 810?

    ReplyDelete
  5. Hi, great post!
    I got lost in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature recover phase. You wrote:

    "Normally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private key is used to produce a signature and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key can be used to recover cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signed data"
    Please, could you explain me how you recover cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signed data with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key? It's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time I heard about it.

    Later on you wrote:

    "This means that if we try to "decrypt" a blob using our public key[...]"
    What do you want to mean by "decrypt"? Again, it's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time I heard about using a public key RSA to decrypt data.

    I do not understand quite well your process of looking for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature, what does trydec function do?
    Could not you to try to do it by brute force? Sign-hash blob files with several hash functions and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n looking for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 result on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 .mdt binary data?

    Maybe cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem is that I am a macá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365matician (...XD) trying to get your work.

    Thank you again and waiting for more post!

    ReplyDelete
    Replies
    1. Thank you!

      As for you question - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main problem here is terminology regarding RSA.

      First, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 macá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365matical definition of RSA is a trapdoor permutation family. Let's say we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public exponent e, private exponent d and modulus N.

      Now, for each message m in Zn*, applying m' = (m^e) mod N is a onto one-to-one mapping into Zn*. Recall that we chosen e,d such that e*d = 1 (mod phi(N)). This means that by applying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 permutation (m' ^ d) mod N = ((m^e) ^ d) mod N = (m ^ (e*d mod phi (N))) mod N = m (mod N).

      So applying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reverse permutation allowed us to retrieve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original message m.

      Now - people often refer to RSA as an encryption scheme. It isn't (because it's not CPA-secure, as it's completely deterministic). But you *could* think of it as encryption in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sense that after permuting a message with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public exponent, it's hard to retrieve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message without knowing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private exponent.

      In that sense, we can say that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operation (m^e) mod N is public-encryption and (m^d) mod N is private-decryption.

      The inverse is also true (since RSA is symmetric with regards to e,d). So we could say that (m^d) mod N is private-encryption and (m^e) mod N is public-decryption.

      Next comes an important primitive that is often used with RSA - signing. Imagine you have a message and would like to guarantee it was produced *only* by someone who knows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private exponent. You could do this by applying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 permutation using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private exponent - that is, for each message m, produce (m^d) mod N. We just called this operation "private-encryption" in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous paragraph, but when using RSA as a signature scheme, we could call this operation "signing".

      So... how is this useful at all? Well, someone with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public exponent can apply "public-decryption" on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message, and by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 commutativity of multiplication: (m' ^ d) mod N = ((m^d) ^ e) mod N = (m ^ (d*e mod phi (N))) mod N = (e*d mod phi (N))) mod N = m (mod N). So anyone with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key can use this to retrieve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message m from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature. We'll call this operation "verify".

      Finally, if we already have a signature block produced using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private exponent, and we know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signed message has some unique structure, we can scan each block and attempt to perform RSA-verification ("public-decryption") on every block. This will produce some message m' - if it matches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 structure we know, it is (ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than a negligible probability) our signature block.

      Cheers,
      Gal.

      Delete
    2. Hi Gal,

      Thank you by your quick response. I know what involves RSA cryptography, part of my daily job is related with crypto issues. The thing was that this was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time I read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 concept of encryption when you want to refer to signing, but I agree is just terminology.

      I know a forum is not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best place to write maths...jajaja but I suppose you wanted to write (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ' was left):

      (m^e) mod N = m' is public-encryption and (m'^d) mod N is private-decryption
      &&
      (m^d) mod N = m' is private-encryption and (m'^e) mod N is public-decryption

      Therefore, what I understand is that when you write "we try to "decrypt" a blob using our public key" what you are looking for is a hash value. Because what has been "encrypted/signed" should be a hash value. That's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way signing process works.

      Then, what is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output of your TryDecrypt function, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash value of some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 blocks? How did you choose cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 m message along cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 .mdt binary to perform cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "decryption"?

      Thank you
      Regards

      Delete
    3. Hi Jota,

      Sorry, just wanted to write a full explanation just in case ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r people find it useful. Anyway, I agree, writing math in a blog post is pretty hard :)

      As for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual value that is signed - it's actually special version of HMAC-SHA256 (w/ a different i_pad and o_pad) over all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block files' data, concatenated. But you can outright ignore that and still find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature block.

      Here are a couple of facts:
      1. The signature is 2048 bits long, while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 HMAC-SHA256 is only 256 bits long.
      2. The signature uses PKCS#1 v1.5 padding

      If we simply use RSA-public-decrypt w/ cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate padding on each 2048-bit block, we'll get a 2048 bit result. For each randomly-chosen block, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resulting block's bits will be roughly uniformly distributed (since RSA is a trapdoor permutation). But we know that in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature blob cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first 2048-256 bits will be zero (remember this is after removing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 padding). The chances of that happening in uniformly distributed message is negligibly small 2^(-1792).

      So all TryDecrypt does is iterate over each block, use "RSA public decrypt" w/ cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate padding, and check if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resulting block starts with a bunch of leading zeros.

      Delete
    4. Hi Gal (my name is Jose, I use yours so I think is fair you to know mine),

      You do not have to apologize, you did not know it and, probably, some readers have learnt a little more about crypto ;)

      Perfect, everything clear now! Maybe, you will find interesting this article: https://www.cs.cornell.edu/courses/cs5430/2015sp/notes/rsa_sign_vs_dec.php

      Look for vulnerabilities on non-public things is quite exciting, but have you try to check how good is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation of public TEEs such OP-TEE?

      Will you participate at any security conference to talk about this?

      Thank you,
      Regards

      Delete
    5. Hi Jose,

      Sorry for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 late response! I missed your response.

      I didn't look at public TEEs yet, but I might get around to it (for example, Trusty TEE looks like it could be interesting...)

      Also, I haven't spoken in any conference yet (and have nothing planned up ahead). Mainly because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 conferences happen to coincide with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exam period :)

      All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best,
      Gal.

      Delete
  6. Awesome post!

    I am trying to follow your post and reverse widevine trustlet(and if needed libQSEECom.so for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 loading part).
    Is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re a easy way to locate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entry function for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlet being loaded? Do I have to look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 libQSEECom.so ?

    Thanks in advance

    ReplyDelete
    Replies
    1. Thank you! I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest way is to disassemble cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first function (func_0) and look for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 returns a function pointer. That function pointer points to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entry function. Alternately, you can just search for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Widevine commands (such as PRDiag*) and work backwards from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re using XREFs.

      Delete
  7. Cool post!

    "So let's search for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se two bytes in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ".mdt" and save each found blob into a file."

    How could you know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 length of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se blobs?

    ReplyDelete
    Replies
    1. I didn't, but you can save cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 blob from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 match index until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file, and asn1parse will stop at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ASN1 data.

      Delete
  8. Could you share cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to "decrypt" cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 2048-bit signature blob?
    I searched cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet but most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m work on certificates with certain formats, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than raw-data parameters.

    ReplyDelete
    Replies
    1. Hi CrazyGalaxy,

      I didn't do anything fancy - I simply used OpenSSL's RSA_public_decrypt (https://www.openssl.org/docs/man1.1.0/crypto/RSA_public_decrypt.html) for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "decryption".

      To get OpenSSL to load cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key, I did write a small PyCrypto script to define cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public key from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameters (e,N) using RSA.construct (https://www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA-module.html#construct), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n saved cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to a PEM.

      All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best,
      Gal.

      Delete

    2. Cool WhatsApp Group Names. Drink Dudes. Walky Talky. Innocent girls. Free Wi-Fi. zindagi na milegi dobara. Dil Dhadakane Do. No girls. Best Dudes. So, Here I am sharing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Best Whatsapp group names for friends Whatsapp Group. Pencil Chors. Play your way. So Called Engineers. Non-Stop Notifications. The Untouchables. Toxic Texting. Wandering Minds. We Tie Until We Die. Cool, Funny Best Whatsapp Group names for friends, family, sports lovers, Girls, Boys, Engineers, Doctors in Hindi, Marathi, gujarathi, Tamil, Punjabi. Ultimate Collection of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best WhatsApp Group Names in 2018. Top, Awesome, funny & cool WhatsApp group names for Friends, lovers, family & cousins. Best WhatsApp Group Names are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first search whenever someone creates a new group on WhatsApp. Hey guys all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best and top rated 500+ best,cool,funny,attitude,savage,boys,girl,friends,family whatsapp group names list 2018 & Whatsapp dare messages.

      Delete
  9. How do you get to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trustlets in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first place? Using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 link to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shamu firmware that you provide I find a system.img file in which I assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 widevine trustlet exists, but I cannot continue from here. How did you get to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual file?

    ReplyDelete
  10. hi
    when i use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 QSEECom_start_app,return an error :QSEECom_start_app(.., '/firmware/image/', '***', 1048640) = 'Invalid argument'.
    please help me check
    tks

    ReplyDelete

  11. Thanks, I'm reading this text – I hope you found it useful. I've got browse your journal superb info produce good information article, Your article could be a smart inspiration for this blog. Thanks For different info within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future. Arlo security camera


    ReplyDelete
  12. Hey, thanks for posting amazing articles. These blogs would definitely help us keep posted about new trends in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 market.

    Limbo Emulator

    CbseLearner

    ReplyDelete
  13. Nice Article Very Helpful ! Thanks for sharing ! Also check
    Attitude Shayari
    Sad Hindi Shayari
    Shayari99

    ReplyDelete
  14. http://myinfomaniya.com/pubg-name-generator-best-cool-stylish-trending-killer-pubg-names/
    http://myinfomaniya.com/best-pubg-names/

    ReplyDelete
  15. Want to watch live tv on your Android smartphone cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n download Solid streamz for free. Solid streamz provides access to thousands of channels which you can stream anywhere anytime.

    ReplyDelete
  16. This comment has been removed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 author.

    ReplyDelete

  17. Wow! Nice article. Thank you so much for sharing. Just want to share Nova Launcher Prime Apk which is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best Android Launcher.

    ReplyDelete
  18. Thank you for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 great information.
    nox app player

    ReplyDelete
  19. Amazing Article sir, Thank you for giving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 valuable Information really awesome.

    Thank you, sir

    Cheers!

    WHATSAPP GROUP JOIN LINK LIST

    ReplyDelete
  20. very nice post thanks for sharing with us
    attitude shayari

    ReplyDelete
  21. Are you here to locate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 net worth of your favorite celebrity. Search no more while at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right place. Here you will not more or less cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 net worth of your favorite superstar but you'll also find all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 brand new and details, you are looking for like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir films, era and lot more random celebrity net worth,celebrity net worth 2018,celebrity net worth list,celebrity net worth 2019,Forbes richest celebrities net worth,celebrity net worth list 2018
    New Celebrity Net Worth Gucci Mane
    New Celebrity Net Worth Eminem
    New Celebrity Net Beyonce
    New Celebrity Net Adam Sandler
    New Celebrity Net Jerry Seinfeld
    New Celebrity Net Kevin Hart
    New Celebrity Net Triple H
    New Celebrity Net John Cena
    New Celebrity Net Julia Louis Dreyfus
    New Celebrity Net David Bowie

    ReplyDelete
  22. Nice Article. Also check out how to fix to allow access please respond on your iphone error on your iPhone device

    ReplyDelete
  23. This comment has been removed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 author.

    ReplyDelete
  24. Nice article. You may also like Spotify Cracked Apk if you love listening to songs online.

    ReplyDelete
  25. You define your thought classically by this blog, thank you so much for sharing such an amazing blog. Get website designing services by ogen infosystem in delhi, india.
    Website Designing Company in Delhi

    ReplyDelete
  26. Keep more data about this related blog, by and large this is significant for me. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best Mutual Fund Advisor and Investor premiums at Mutualfundwala.
    Mutual Fund Advisor

    ReplyDelete
  27. Blockchain is a functions involves conversion of input value to numerical value. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process take a data of fixed length
    learn this process in bitcoin online course

    ReplyDelete
  28. This is Very very nice article. Everyone should read. Thanks for sharing. Don't miss WORLD'S BEST TraindDrivingSimulatorFreeGames

    ReplyDelete
  29. Thank you so much for this Post and all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best for your future. You are really a talented person I have ever seen. I am satisfied with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 arrangement of your post.

    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer support

    ReplyDelete
  30. This is Very very nice article. Everyone should read. Thanks for sharing. Don't miss WORLD'S BEST CarGamesDownload

    ReplyDelete
  31. This is Very very nice article. Everyone should read. Thanks for sharing. Don't miss WORLD'S BEST Game

    ReplyDelete
  32. Canada’s new Program for workers and who are wiling to live cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re so here is a new way for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to go cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re by AIPP canada

    https://worldimmigrations.blogspot.com/2019/05/how-to-apply-atlantic-immigration-pilot.html

    ReplyDelete
  33. Thank you so much for this Post and all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best for your future. You are really a talented person I have ever seen. I am satisfied with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 arrangement of your post.

    Mcafee.com/activate

    ReplyDelete
  34. Nice blog, visit Lifestyle Magazine for page 3 parties, events and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r functions.
    Lifestyle Magazine India

    ReplyDelete
  35. Appreciate you sharing, great article.Really looking forward to read more. Really Great.
    I have some suggestions. Here is a blog - Photo editing & photography tips.
    This may help you to find something useful

    ReplyDelete
  36. Wonderful blog! I found it while browsing on Yahoo News

    Regards= office.com/setup

    ReplyDelete
  37. To get started Office 2019, 2016 and office 365 download or installation you must need valid 25 character product key & visit-

    office.com/setup |
    www.office.com/setup |
    office.com/setup

    ReplyDelete
  38. Great Post.

    Thanks for sharing this. This provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 step by step information regarding



    Hindi Me Jankari You are looking for Best Attitude Quotes Status in English for Whatsapp & Facebook, Attitude Status for Whatsapp. The best attitude status and new attitude caption you may like.

    ReplyDelete
  39. HappyMod is a new generation App Store for Modified Apps and Games that generate premium features.

    https://happymod.vip
    https://www.happymod.vip
    HappyMod
    HappyMod Apk

    ReplyDelete
  40. https://www.brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rprintersupport.co.uk

    https://www.brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rprintersupport.co.uk/brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r-printer-support/

    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support or Call : +44-121-286-4615

    How to Solve Installation Problem with my Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer using a USB/local connection

    https://www.brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rprintersupport.co.uk/2019/06/27/how-to-solve-installation-problem-with-my-brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r-printer-using-a-usblocal-connection/

    How to Setup Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Wireless Printer Call +44-121-286-4615
    https://www.brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rprintersupport.co.uk/2019/06/28/how-to-setup-brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r-wireless-printer-call-44-121-286-4615/
    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Wireless Support or Call : +44-121-286-4615

    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support or Call : +44-121-286-4615

    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Drivers Call: +44-121-286-4615

    https://www.brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rprintersupport.co.uk/2019/06/27/brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r-printer-drivers-call-44-121-286-4615/


    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support Drivers or Call : +44-121-286-4615


    brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer helpline
    brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer support number
    brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer technical support

    ReplyDelete
  41. norton.com/setup to Secure your All Windows, Mac & Android devices. Get norton setup and Run to Install Norton Anti Virus. for more information about norton antivirus, just visit www.norton.com/setup.

    mcafee.com/activate - Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comprehensive internet security on your device with mcafee activate Antivirus. Get your McAfee installed and activated with easy steps. for more information just visit www.mcafee.com/activate.

    office.com/setup - To get started with Microsoft Office download & install office setup. Find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 product key for activation at www.office.com/setup.

    ReplyDelete
  42. Learn how to download, install, activate, and uninstall Microsoft Office Setup on different devices and operating systems such as Mac and Windows. Activate your 25 character alphanumeric product key for Office 365, Office 2016, Office 2013, Office 2010, or Office 2007 at Office.com/setup.
    office.com/setup

    ReplyDelete
  43. Yes, such a great artical i will always follow this blog
    Https://nonupye.in

    ReplyDelete
  44. Setup And Install Your Office Product With Activation Key
    office com setup

    ReplyDelete
  45. WONDERFUL Post for exploring qualcomms secure execution and thanks for share with us keep moving..waiting for more updates - regards - thoptv apk

    ReplyDelete
  46. Exploring qualcomms secure execution was really great info and waiting for more updates - ghd sports & ghd sports apk

    ReplyDelete
  47. code execution in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TrustZone kernel was one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best article and You made some nice points cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re - OnMovies App

    ReplyDelete
  48. Thank you for share cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 explore Qualcomm's Secure Execution Environment. it was really great info thank you - ghd sports apk & gomax tv apk

    ReplyDelete
  49. Everything is very open and very clear explanation for step by step for explore Qualcomm's Secure Execution Environment, waiting for more updates, thank you for sharing with us. - GHDSPORTS & GHD SPORTS Apk

    ReplyDelete
  50. Wow such great and effective guide
    Thank you so much for sharing this.
    Thenku Again

    ReplyDelete
  51. Excellent article. Very interesting to read.I really love to read such a nice article. Thanks! keep rocking.

    www-norton.com/setup

    ReplyDelete
  52. Highly popular among cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PC users, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Norton antivirus software has been eliminating malware, viruses and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r kinds of online and offline threats from affecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 performance of a computer for years. norton.com/setup | | mcafee.com/activate | office.com/setup

    ReplyDelete
  53. Norton provides world class security solution. Every Norton antivirus system is designed with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latest technology and updated regularly to bring in new virus definitions that help in detecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 viruses. Norton antivirus system is one such program that has numerous all-round protection antivirus. office.com/setup | norton.com/setup | www.norton.com/setup

    ReplyDelete
  54. Wow such great and effective guide
    Thank you so much for sharing this.
    Thenku Again

    ReplyDelete
  55. Wow such great and effective guide
    Thank you so much for sharing this.
    Thenku Again

    ReplyDelete
  56. Get instant access to a huge number of apps for Android, Windows, and Mac operating systems. Download apps from Earnigo Apps
    https://apps.earnigo.com/
    Earnigo Apps
    Earnigo Apps download
    Earnigo Apps for android
    Earnigo Apps Apk

    ReplyDelete
  57. India's one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most popular T20 Cricket Tournament IPL Next Season Coming soon. Here you can check
    Vivo IPL 2020 Points Table Information.

    ReplyDelete
  58. Www.Office.Com/Myaccount Main Issue: Resolving common installation issues using Microsoft

    resources Activation Issues Connection Issues Operating System Issues SOLUTION: Resolving

    basic establishment issues utilizing Microsoft resources This guide bargains particularly

    with Microsoft Office forms 2013 and 365...

    office.com/myaccount ||
    norton.com/myaccount ||
    office.com/setup

    ReplyDelete
  59. Download latest audio and video file fromvidmate

    ReplyDelete
  60. Download latest audio and video file fromvidmate

    ReplyDelete
  61. Download latest audio and video file fromvidmate

    ReplyDelete
  62. In case you are maintaining a business and need to fix all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 major technical issues at that point don't falter to call HP support technician whenever. In case you are confronting any hp error code, at that point around cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, you contact cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 support service and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technician will repair cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issues successfully. They will support your profitability and afterward cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y will spare cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time by means of having cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir services to arrange cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 settings legitimately from being cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 company in a first-class way.

    ReplyDelete
  63. mcafee.com/activate – Facing problems with mcafee products? Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best instant solution for downloading, installing and activating McAfee Antivirus via mcafee activate and www.mcafee.com/activate.

    norton.com/setup - Learn how to manage, download, install, and activate norton. Visit www.norton.com/setup, Enter norton product key and Install norton setup.

    ReplyDelete
  64. Visit us or you Can Contact whenever you are free to Call us. We are available for support 24*7 to Fix Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Offline Windows 10 Error. Visit us: Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Offline Windows 10 Technical Support

    ReplyDelete
  65. Keep it up for more updates about this related blog. Visit Ogen Infosystem for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best Website Design and Development Company in Delhi, India.
    Website Designing Company in India

    ReplyDelete
  66. Get 24/7 service by calling on brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer support toll-free phone number and troubleshoot all sorts of Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r printer related issues. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best help from experts.

    ReplyDelete
  67. Are you facing Ink Cartridge cannot be recognized Error? No need to worry, we are always here 24*7. We have a group of certified experts. Visit us: Ink Cartridges Not Recognized.

    ReplyDelete
  68. Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer UK is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 team of best technical support experts who can provide you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best technical service. Call us USA/Canada: +1-888-480-0288 & UK: +44-800-041-8324.

    ReplyDelete
  69. watch this online movie and tv show visit this.
    hd cinema apk 2018

    ReplyDelete
  70. Thank you so much for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wonderful website. Which made my day and got full information about Ac Market. Loved this website and recommended for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 users.

    https://acmarket.one/
    Ac Market

    ReplyDelete

  71. What a superb post! I have no words to describe this post because everthing is clear with your wonderfull words. I really feel out for world reading your post, it is full of fresh and usefull. I really appreciate, keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work continue.

    norton.com/setup ! www.norton.com/setup ! office.com/setup ! office.com/setup ! mcafee.com/activate ! mcafee.com/activate





    ReplyDelete
  72. With an aim to keep my Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer in running state and in appropriate condition I want to resolve Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Offline issue. So, I am looking for a reliable support that can guide me to eliminate this error in an easy manner. Someone, please help me to get hold of such service provider that can deliver me results that I want cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most.

    ReplyDelete
  73. If you are looking for HP printer Service number. Then hp printer assistant is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best place to find printer customer services team. We have sourced our number +1 8544-00-5545 to save your time on searching over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 internet. Our technical experts are available 24/7 to solve every technical issues causes by hp printers. We provide best service as compare to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs.
    https://www.hp-printerassistant.com/

    ReplyDelete
  74. If we are working in an organization it is lots of situation that we have to go with. We must be adjustable to cope up with any kind of situation. We can call it as an illusion of control. Thank you for describing more on that here.Jogos 2019
    friv free online Games
    free online friv Games

    ReplyDelete

  75. Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printers Support team works 24/7 for customer satisfaction related to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir damaged devices. Reach cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m via Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Help Online At Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support.
    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support Number | Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support | Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Customer Support

    ReplyDelete
  76. If you still have issue while depositing or withdrawing cryptocurrency from Bittrex, even if you fail to create or login to your Bittrex account, just feel free to get in touch with Bittrex Customer Support services for technical assistance with issues related to Bittrex wallet.

    bittrex support number
    bittrex support phone number
    bittrex support


    You can contact Bittrex tech support representatives via phone call or live chat. They are available 24*7 for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 convenience of users.

    bittrex exchange
    bittrex customer service
    bittrex phone number

    ReplyDelete
  77. Visit Kalakutir Pvt Ltd for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best Floor Marking Paint and School Bus Painting.
    Floor Marking Paint

    ReplyDelete
  78. Nice one! This post is amazing and very important. Geek squad support Thanks for sharing.

    ReplyDelete
  79. Step-by-step instructions how to download, install, activate. In case of error uninstall and reinstall your software cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n contact our Experts.
    office.com/setup
    office setup
    www.office.com/setup

    ReplyDelete
  80. Email customer support number has become an essential contact for every user cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days. As a part of our daily lives, whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r professional or personal, emailing plays a major role. Even a slight problem can affect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 email account. Any loophole in email privacy may risk your data and exchanged email. To understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 importance.Read more about Email customer support number
    email customer service
    sbcglobal customer support
    sbcglobal email support
    email support
    aol email support
    Official ATT Email Help Center where you can find tips and tutorials on using Email and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r answers to frequently asked questions.
    att customer services numbers
    att email support
    att email customer service

    ReplyDelete
  81. I really happy found this website eventually. This site article is very good. This is a great post.
    www.office.com/setup

    ReplyDelete
  82. If you are looking for any help regarding your Hp Printer cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n just dial for fast and reliable helpline number of HP Customer Service 1-800-382-3046. Then this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best direct number to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Hp Printer Customer Services team. We have sourced this number to save your time searching over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 internet for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Hp Customer Support Phone Number.

    ReplyDelete
  83. will visit your website again soon. You can check Upcoming BBL 2019-2020 Schedule here

    ReplyDelete
  84. اگر دانشجو هستید و به دنبال ترجمه ارزان می گردید بهترین سایت برای شما سایت ترجمه آنلاین است. این سایت با داشتن تیمی حرفه ای در ضمینه ترجمه متون فارسی به انگلیسی و ترجمه متون انگلیسی به فارسی ، بهترین همراه شما در دوران دانشجویی خواهد بود. تخصص ما ترجمه مقاله های تخصصی دانشگاه است.

    ReplyDelete
  85. Sign in to enter office setup product key. Know how to benefit, download, install, set in movement, uninstall and reinstall MS office setup.
    office.com/setup
    http://officecom-officeoffice.com/
    call us at +1-888-421-9666[tool free]

    ReplyDelete

  86. If you have problems in your Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support visit our website for instant solutions.
    Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support | Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support Number

    ReplyDelete
  87. Norton Setup and Instal Process – For both PC and mobile users. Highly popular among cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PC users, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Norton antivirus software has been eliminating malware, viruses and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r kinds of online and offline threats from affecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 performance of a computer for years. Norton.com/setup , being a security solution providing company has created

    office.com/setup|| norton.com/setup||norton.com/myaccount ||

    ReplyDelete
  88. Belgian authorities have also changed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 basic fabric of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 social status by inculcating western principles and norms and gave birth to social practices which were far more westernised. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 local people feared that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might lose cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir identity and thus Mouvement des Congolais started.

    Visit: sindika dokolo

    ReplyDelete
  89. Thank you for sharing excellent information. Your website is so cool. I am impressed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 details that you have on this website.
    office.com/setup
    office/setup
    Norton.com/setup

    ReplyDelete

  90. Norton Setup and Instal Process – For both PC and mobile users. Highly popular among cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PC

    users, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Norton antivirus software has been eliminating malware, viruses and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r kinds of

    online and offline threats from affecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 performance of a computer for years.

    Norton.com/setup , being a security solution providing company has created

    office.com/setup|| norton.com/setup||norton.com/myaccount || office.com/setup

    ReplyDelete
  91. Sign in to enter office setup product key. Know how to benefit, download, install, set in movement, uninstall and reinstall MS office setup.
    office.com/setup
    http://officecom-officeoffice.com/
    call us at +1-888-421-9666[tool free]

    ReplyDelete
  92. Well, this is awesome. I like your work here. I am supportive and here to support you always buddy. Keep up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 good share and keep submitting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se kinda blogs.
    Best Laptops
    Best smartwatch
    best smartphone
    Best Home Theatre
    amazon best sellers

    ReplyDelete
  93. I am very happy after reading this fantastic Article, I appereciate your work.

    norton.com/setup | norton.com/setup

    ReplyDelete
  94. Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Printer Support is a team of well experienced experts available round cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 clock to resolve your printer problems. If you face any problem with your device like cable problem, cartage problem, paper jamming and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n reach cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 experts at Brocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Support toll free number and get instant help.

    ReplyDelete
  95. Really great article, Glad to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 article. It is very informative for us. Thanks for posting.Norton™
    provides industry-leading antivirus and security software
    for your PC, Mca, and mobile devices Visit @: - McAfee.com/activate | Mcafee.com/activate| norton.com/setup

    ReplyDelete
  96. Thanks for sharing this fantastic blog, really very informative. Your writing skill is very good, you must keep writing this type of blogs. Geek Squad Tech Support

    ReplyDelete
  97. This Blog is great, and I never seen a Blog like this…..
    I really be grateful for you work and Thanks for providing us a great Platform for share information’s with ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs.
    Computer Virus क्या है

    ReplyDelete
  98. Microsoft Office.com/setup could be a suite of work space advantage applications that is sketched out everything thought to be used for workplace or business utilize.
    office.com/setup

    ReplyDelete
  99. Thanks for sharing this fantastic blog, really very informative. Your writing skill is very good, you must keep writing this type of blogs. alexa customer service

    ReplyDelete
  100. I really happy found this website eventually. Really informative and inoperative, Thanks for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post and effort! Please keep sharing more such blog.

    norton.com/setup

    norton.com/setup

    mcafee.com/activate

    kaspersky activation code

    free pogo games

    roadrunner email

    aol mail

    ReplyDelete
  101. Pleasant stuff! I like to peruse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data that you have imparted to us. I need to get more updates to expand my insight.
    canon printer support | lexmark printer support | epson printer support | lexmark printer support |canon printer support | hp printer support

    ReplyDelete
  102. DraStic DS - Fast emulator from Nintendo DS. The emulator also allows you to customize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 screen, supports Xperia PLAY and NVIDIA Shield.

    ReplyDelete
  103. I really happy found this website eventually. Really informative and inoperative, Thanks for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post and effort! Please keep sharing more such blog.

    norton.com/setup

    norton.com/setup

    mcafee.com/activate

    kaspersky activation code

    pogo not loading

    roadrunner email

    aol mail password recovery

    ReplyDelete

  104. this blog is very informative & knowledgeable
    www.avg.com/retail

    ReplyDelete
  105. Nice Blog, I have get enough information from your blog and I appreciate your way of writing.
    geek squad webroot |
    geek squad webroot

    ReplyDelete
  106. Norton is bundled with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 auto-upgrade feature which updates cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 firewall against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latest cyber threats. If you find that your device is vulnerable to cyber attacks, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you can easily subscribe to a Norton security product on
    Norton Install with Product Key

    ReplyDelete
  107. Webroot safe (Ultimate security) Download at www.webroot.com/safe
    ,a superb lightweight and super fast internet security is just one click away.Webroot is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next generation security provider to safeguard businesses and consumers in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IT world.Webroot services are global across North America, Europe and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Asia Pacific.Webroot security package is simple to setup & install at webroot.com/safe
    . Simply find 20-character alpha-numeric code that is written on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backside of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 retail card.

    ReplyDelete
  108. Very nice!!! This is really good blog information thanks for sharing. We are a reliable third party Quickbooks Help company offering technical support for various any types of technical errors. https://www.quickbooksphonenumber.com/

    ReplyDelete
  109. How to Office Setup. Go to office.com/setup and enter your product key. If you have a previous report of Office or existing Microsoft account, enter your email habitat and password, and click Sign in. Select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Country/Region and Language, and click Continue. On cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 office.com/myaccount page, pick Install
    office.com/setup
    office.com/setup
    office setup

    ReplyDelete
  110. To start using mcafee antivirus, visit mcafee.com/activate and enter 25 digit mcafee activation code and activate your mcafee subscription.Mcafee activate code is a 25-character alpha-numeric code written on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 back of a retail card. It's used to verify mcafee security
    mcafee.com/activate
    www.office.com/setup

    ReplyDelete
  111. Canon Printer Support works effortlessly towards serving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 consumers and have a wide stretch toward resolving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issues, our canon printer Support provides you with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 answers to your issues.

    ReplyDelete