Possible Samsung Unlock method through RIL_OEM_HOOK_RAW? - Android Software/Hacking General [Developers Only]

Hello,
I was looking into CSC.apk today when this caught my eye
CscModemSettingService.java
Notice updateLockInfo and addLockInfo
Code:
/*
* Decompiled with CFR 0_110.
*
* Could not load the following classes:
* android.app.Service
* android.content.Context
* android.content.Intent
* android.content.SharedPreferences
* android.content.SharedPreferences$Editor
* android.os.Bundle
* android.os.Handler
* android.os.IBinder
* android.os.Message
* android.os.SystemProperties
* android.util.Log
* com.samsung.android.sec_platform_library.FactoryPhone
* com.samsung.android.sec_platform_library.PacketBuilder
* java.io.File
* java.lang.Byte
* java.lang.Integer
* java.lang.Object
* java.lang.Runnable
* java.lang.String
* java.lang.StringBuffer
* java.lang.Thread
* java.util.ArrayList
* org.w3c.dom.Node
* org.w3c.dom.NodeList
*/
package com.samsung.sec.android.application.csc;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.SystemProperties;
import android.util.Log;
import com.samsung.android.sec_platform_library.FactoryPhone;
import com.samsung.android.sec_platform_library.PacketBuilder;
import com.samsung.sec.android.application.csc.CscParser;
import java.io.File;
import java.util.ArrayList;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class CscModemSettingService
extends Service {
private static final boolean isMarvell = "mrvl".equalsIgnoreCase(SystemProperties.get((String)"ro.board.platform", (String)"Unknown").trim());
private String CPLockCode = "";
private String DEFAULT_CSC_FILE = CscParser.getCustomerPath();
private String NSPLockCode = "";
private String NetLockCode = "";
private String OTHERS_CSC_FILE = CscParser.getOthersPath();
private String SPLockCode = "";
private int amrVoiceCodec = -1;
private int generalLockInfo = 0;
private int gprsAttachMode = 1;
ArrayList<Byte> mByteArray = new ArrayList();
private Handler mHandler;
private Intent mIntent = null;
private int mItemCount = 0;
private FactoryPhone mPhone = null;
private int networkMode = 0;
private int ssms = -1;
private String strNetworkMode = "auto";
private String strSalesCode = "";
private int unlockCnt = 3;
public CscModemSettingService() {
this.mHandler = new Handler(){
/*
* Enabled aggressive block sorting
* Lifted jumps to return sites
*/
public void handleMessage(Message message) {
int n = message.getData().getInt("error");
switch (message.what) {
default: {
return;
}
case 2000: {
Log.i((String)"CscModemSettingService", (String)"SEND_PRECONFIG_DONE response incoming!!");
if (n == 0) return;
Log.i((String)"CscModemSettingService", (String)"AsyncResult Exception Occur!!!");
return;
}
case 2001: {
Log.i((String)"CscModemSettingService", (String)"SEND_MODEM_DONE response incoming!!");
if (n == 0) return;
Log.i((String)"CscModemSettingService", (String)"AsyncResult Exception Occur!!!");
return;
}
case 2002:
}
Log.i((String)"CscModemSettingService", (String)"SEND_RESET_DONE response incoming!!");
if (n != 0 && !isMarvell) {
Log.i((String)"CscModemSettingService", (String)"AsyncResult Exception Occur!!!");
return;
}
SharedPreferences.Editor editor = CscModemSettingService.this.getSharedPreferences("csc.preferences_name", 0).edit();
editor.putBoolean("csc.key.csc_modem_setting_done", true);
editor.commit();
}
};
}
private void compareLockAndModemInfo() {
this.readModemInfo();
this.readLockInfo();
this.mItemCount = 0;
this.mByteArray = new ArrayList();
this.addModemInfoToBuffer();
this.addLockInfoToBuffer();
Log.i((String)"CscModemSettingService", (String)("compareLockAndModemInfo() : mByteArray = " + this.mByteArray.size()));
this.sendByteBuffer(7, 1);
}
/*
* Enabled aggressive block sorting
*/
private void readLockInfo() {
CscParser cscParser = new CscParser(this.DEFAULT_CSC_FILE);
int n = 5;
this.NetLockCode = "";
this.SPLockCode = "";
this.NSPLockCode = "";
this.CPLockCode = "";
String string = cscParser.get("Settings.Main.Security.UnlockCnt");
this.unlockCnt = string == null ? 3 : new Integer(string);
NodeList nodeList = cscParser.searchList(cscParser.search("Settings.Main.Security."), "NetworkLock");
if (nodeList != null && nodeList.getLength() > 0) {
this.generalLockInfo = 1 | this.generalLockInfo;
for (int i = 0; i < nodeList.getLength(); ++i) {
StringBuffer stringBuffer = new StringBuffer(cscParser.getValue(nodeList.item(i)));
if (stringBuffer.toString().length() == 5) {
n = 5;
stringBuffer.append("#");
} else {
n = 6;
}
Log.i((String)"CscModemSettingService", (String)("NetworkLock > code (" + i + ") : " + stringBuffer.toString()));
this.NetLockCode = this.NetLockCode + stringBuffer.toString();
}
}
Log.i((String)"CscModemSettingService", (String)("NetworkLock > all code : " + this.NetLockCode));
NodeList nodeList2 = cscParser.searchList(cscParser.search("Settings.Main.Security."), "SubsetLock");
if (nodeList2 != null && nodeList2.getLength() > 0) {
this.generalLockInfo = 2 | this.generalLockInfo;
for (int i = 0; i < nodeList2.getLength(); ++i) {
StringBuffer stringBuffer = new StringBuffer(cscParser.getValue(nodeList2.item(i)));
if (stringBuffer.toString().length() == 2) {
stringBuffer.append("#");
}
Log.i((String)"CscModemSettingService", (String)("SubsetLock > code (" + i + ") : " + stringBuffer.toString()));
this.NSPLockCode = this.NSPLockCode + Integer.toString((int)n) + stringBuffer.toString();
}
}
Log.i((String)"CscModemSettingService", (String)("SubsetLock > all code : " + this.NSPLockCode));
NodeList nodeList3 = cscParser.searchList(cscParser.search("Settings.Main.Security."), "SPLock");
if (nodeList3 != null && nodeList3.getLength() > 0) {
this.generalLockInfo = 8 | this.generalLockInfo;
for (int i = 0; i < nodeList3.getLength(); ++i) {
String string2 = cscParser.getValue(nodeList3.item(i));
Log.i((String)"CscModemSettingService", (String)("SPLock > code (" + i + ") : " + string2));
this.SPLockCode = this.SPLockCode + string2;
}
}
Log.i((String)"CscModemSettingService", (String)("SPLock > all code : " + this.SPLockCode));
NodeList nodeList4 = cscParser.searchList(cscParser.search("Settings.Main.Security."), "CPLock");
if (nodeList4 != null && nodeList4.getLength() > 0) {
this.generalLockInfo = 16 | this.generalLockInfo;
for (int i = 0; i < nodeList4.getLength(); ++i) {
String string3 = cscParser.getValue(nodeList4.item(i));
Log.i((String)"CscModemSettingService", (String)("CPLock > code (" + i + ") : " + string3));
this.CPLockCode = this.CPLockCode + string3;
}
}
Log.i((String)"CscModemSettingService", (String)("CPLock > all code : " + this.CPLockCode));
}
/*
* Enabled aggressive block sorting
*/
private void readModemInfo() {
CscParser cscParser = new CscParser(this.DEFAULT_CSC_FILE);
this.strNetworkMode = new CscParser(this.OTHERS_CSC_FILE).get("Settings.Main.Network.NetworkMode");
if (this.strNetworkMode == null) {
String string = SystemProperties.get((String)"ro.csc.sales_code");
this.networkMode = "SKT".equals((Object)string) || "KTT".equals((Object)string) || "LGT".equals((Object)string) ? 0 : 1;
} else if (this.strNetworkMode.equalsIgnoreCase("auto")) {
this.networkMode = 1;
} else if (this.strNetworkMode.equalsIgnoreCase("UMTS")) {
this.networkMode = 2;
} else if (this.strNetworkMode.equalsIgnoreCase("GSM")) {
this.networkMode = 3;
} else if (this.strNetworkMode.equalsIgnoreCase("900")) {
this.networkMode = 4;
} else if (this.strNetworkMode.equalsIgnoreCase("1800")) {
this.networkMode = 5;
} else if (this.strNetworkMode.equalsIgnoreCase("1900")) {
this.networkMode = 6;
}
if (cscParser.get("Settings.Main.Network.AutoAttach") == null) {
this.gprsAttachMode = 1;
} else if (cscParser.get("Settings.Main.Network.AutoAttach").equalsIgnoreCase("on")) {
this.gprsAttachMode = 1;
} else if (cscParser.get("Settings.Main.Network.AutoAttach").equalsIgnoreCase("off")) {
this.gprsAttachMode = 0;
}
if (cscParser.get("Settings.Messages.SMS.SSMS") == null) {
this.ssms = 0;
} else if (cscParser.get("Settings.Messages.SMS.SSMS").equalsIgnoreCase("on")) {
this.ssms = 1;
} else if (cscParser.get("Settings.Messages.SMS.SSMS").equalsIgnoreCase("off")) {
this.ssms = 0;
}
if (cscParser.get("Settings.Main.Sound.AMRVoiceCodec") == null) {
this.amrVoiceCodec = -1;
return;
} else {
if (cscParser.get("Settings.Main.Sound.AMRVoiceCodec").equalsIgnoreCase("enable") || cscParser.get("Settings.Main.Sound.AMRVoiceCodec").equalsIgnoreCase("on")) {
this.amrVoiceCodec = 1;
return;
}
if (!cscParser.get("Settings.Main.Sound.AMRVoiceCodec").equalsIgnoreCase("disable") && !cscParser.get("Settings.Main.Sound.AMRVoiceCodec").equalsIgnoreCase("off")) return;
{
this.amrVoiceCodec = 0;
return;
}
}
}
private void readSalesCode() {
this.strSalesCode = new CscParser(this.DEFAULT_CSC_FILE).get("GeneralInfo.SalesCode");
Log.i((String)"CscModemSettingService", (String)("csc modem strSalesCode = " + this.strSalesCode));
}
private void updateLockInfo() {
String string;
String string2 = CscParser.getSalesCode();
if (!string2.equals((Object)"null") && new File(string = "/system/csc/" + string2 + this.DEFAULT_CSC_FILE).exists()) {
this.DEFAULT_CSC_FILE = string;
}
this.readLockInfo();
this.mItemCount = 0;
this.mByteArray = new ArrayList();
this.addLockInfoToBuffer();
Log.i((String)"CscModemSettingService", (String)("updateLockInfo() : mByteArray Size = " + this.mByteArray.size()));
this.sendByteBuffer(8, 0);
}
private void updateModemInfo() {
this.readSalesCode();
this.sendSalesCode();
this.readModemInfo();
this.mItemCount = 0;
this.mByteArray = new ArrayList();
this.addModemInfoToBuffer();
Log.i((String)"CscModemSettingService", (String)("updateModemInfo() : mByteArray Size = " + this.mByteArray.size()));
this.sendByteBuffer(7, 0);
this.sendResetMsg();
}
public void addLockInfoToBuffer() {
Log.i((String)"CscModemSettingService", (String)"add Lock Info");
this.mByteArray.add((Object)new Byte(-127));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(6));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.generalLockInfo)));
this.mItemCount = 1 + this.mItemCount;
if ((1 & this.generalLockInfo) > 0) {
int n = this.NetLockCode.length();
int n2 = n + 15;
this.mByteArray.add((Object)new Byte(-126));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n2 & 255)));
this.mByteArray.add((Object)new Byte((byte)(n2 << 8)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.unlockCnt)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n & 255)));
this.mByteArray.add((Object)new Byte((byte)(n << 8)));
new byte[this.NetLockCode.length()];
byte[] arrby = this.NetLockCode.getBytes();
for (int i = 0; i < arrby.length; ++i) {
this.mByteArray.add((Object)new Byte(arrby[i]));
}
this.mItemCount = 1 + this.mItemCount;
}
if ((2 & this.generalLockInfo) > 0) {
int n = this.NSPLockCode.length();
int n3 = n + 15;
this.mByteArray.add((Object)new Byte(-125));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n3 & 255)));
this.mByteArray.add((Object)new Byte((byte)(n3 << 8)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.unlockCnt)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n & 255)));
this.mByteArray.add((Object)new Byte((byte)(n << 8)));
new byte[this.NSPLockCode.length()];
byte[] arrby = this.NSPLockCode.getBytes();
for (int i = 0; i < arrby.length; ++i) {
this.mByteArray.add((Object)new Byte(arrby[i]));
}
this.mItemCount = 1 + this.mItemCount;
}
if ((8 & this.generalLockInfo) > 0) {
int n = this.SPLockCode.length();
int n4 = n + 15;
this.mByteArray.add((Object)new Byte(-124));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n4 & 255)));
this.mByteArray.add((Object)new Byte((byte)(n4 << 8)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.unlockCnt)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n & 255)));
this.mByteArray.add((Object)new Byte((byte)(n << 8)));
new byte[this.SPLockCode.length()];
byte[] arrby = this.SPLockCode.getBytes();
for (int i = 0; i < arrby.length; ++i) {
this.mByteArray.add((Object)new Byte(arrby[i]));
}
this.mItemCount = 1 + this.mItemCount;
}
if ((16 & this.generalLockInfo) > 0) {
int n = this.CPLockCode.length();
int n5 = n + 15;
this.mByteArray.add((Object)new Byte(-123));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n5 & 255)));
this.mByteArray.add((Object)new Byte((byte)(n5 << 8)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.unlockCnt)));
this.mByteArray.add((Object)new Byte(3));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(n & 255)));
this.mByteArray.add((Object)new Byte((byte)(n << 8)));
new byte[this.CPLockCode.length()];
byte[] arrby = this.CPLockCode.getBytes();
for (int i = 0; i < arrby.length; ++i) {
this.mByteArray.add((Object)new Byte(arrby[i]));
}
this.mItemCount = 1 + this.mItemCount;
}
}
public void addModemInfoToBuffer() {
Log.i((String)"CscModemSettingService", (String)"add Modem Info");
if (this.networkMode > 0) {
this.mByteArray.add((Object)new Byte(-121));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.networkMode)));
this.mItemCount = 1 + this.mItemCount;
}
this.mByteArray.add((Object)new Byte(-119));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.gprsAttachMode)));
this.mItemCount = 1 + this.mItemCount;
if (this.amrVoiceCodec >= 0) {
this.mByteArray.add((Object)new Byte(-117));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.amrVoiceCodec)));
this.mItemCount = 1 + this.mItemCount;
}
this.mByteArray.add((Object)new Byte(-115));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(11));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte((byte)(255 & this.ssms)));
this.mByteArray.add((Object)new Byte(2));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(1));
this.mByteArray.add((Object)new Byte(0));
this.mByteArray.add((Object)new Byte(0));
this.mItemCount = 1 + this.mItemCount;
}
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
this.mPhone = new FactoryPhone((Context)this);
}
public void onDestroy() {
super.onDestroy();
this.mPhone.disconnectFromRilService();
}
public void onStart(Intent intent, int n) {
Log.i((String)"CscModemSettingService", (String)"onStart");
this.mIntent = intent;
Thread thread = new Thread(new Runnable(){
public void run() {
if (CscModemSettingService.this.mIntent != null && CscModemSettingService.this.mIntent.hasExtra("MODE")) {
String string = CscModemSettingService.this.mIntent.getStringExtra("MODE");
if ("SET_LOCK_INFO".equals((Object)string)) {
Log.i((String)"CscModemSettingService", (String)"SET_LOCK_INFO for modem values. (PHASE 1 writing)");
CscModemSettingService.this.updateLockInfo();
}
if ("SET_MODEM_INFO".equals((Object)string)) {
Log.i((String)"CscModemSettingService", (String)"SET_MODEM_INFO for modem values. (PHASE 2 writing)");
CscModemSettingService.this.updateModemInfo();
}
if ("COMPARE_VERIFY_MODEM".equals((Object)string)) {
Log.i((String)"CscModemSettingService", (String)"COMPARE_VERIFY for modem values. ");
CscModemSettingService.this.compareLockAndModemInfo();
}
return;
}
Log.i((String)"CscModemSettingService", (String)"NO EXTRA");
}
});
thread.setPriority(10);
thread.start();
}
public void sendByteBuffer(int n, int n2) {
int n3 = this.mByteArray.size();
byte[] arrby = new byte[n3];
for (int i = 0; i < n3; ++i) {
arrby[i] = ((Byte)this.mByteArray.get(i)).byteValue();
}
Log.i((String)"CscModemSettingService", (String)"sendByteBuffer");
PacketBuilder packetBuilder = new PacketBuilder(6, (byte)n);
if (n == 7) {
packetBuilder.addData((byte)n2);
}
packetBuilder.addData((byte)this.mItemCount);
packetBuilder.addData(arrby, 0, n3);
this.mPhone.invokeOemRilRequestRaw(packetBuilder.getPacket(), this.mHandler.obtainMessage(2001));
}
public void sendResetMsg() {
Log.i((String)"CscModemSettingService", (String)"sendResetMsg");
PacketBuilder packetBuilder = new PacketBuilder(6, 5);
packetBuilder.addData(1);
if (this.mPhone != null) {
this.mPhone.invokeOemRilRequestRaw(packetBuilder.getPacket(), this.mHandler.obtainMessage(2002));
return;
}
Log.e((String)"CscModemSettingService", (String)"sendResetMsg fail");
}
public void sendSalesCode() {
Log.i((String)"CscModemSettingService", (String)"sendSalesCode");
if (this.strSalesCode == null) {
return;
}
PacketBuilder packetBuilder = new PacketBuilder(6, 1);
packetBuilder.addData(0);
packetBuilder.addData(0);
packetBuilder.addData(this.strSalesCode.getBytes(), 0, this.strSalesCode.getBytes().length);
this.mPhone.invokeOemRilRequestRaw(packetBuilder.getPacket(), this.mHandler.obtainMessage(2000));
}
}
It appears to read the lock codes from the /system/CSC and then update them in the modem through RIL function invokeOemRilRequestRaw (this is also the same api that samsung servicemode app uses). This is on an sgh m919.
Perhaps this could be copied, but we could instead send 00000000 as the new NetLock code?
Obviously this would require root and require the app to be running as a system app since we are calling a protected RIL function (unless we use the Samsung @multiclient api, that requires no privileges and is implemented in stock). But it would be simple to make such an app if this method works. I also discovered that unlockCnt is the number of tries you get for the network unlock code before it is locked out, not that it matters if we can just change the code to whatever we want.
Edit: looks like it is not setting the network lock key as I originally thought, but instead setting a list of allowed MCCMNC that are read from the CSC.
So if the phone was locked to MCCMNCs (making these up)
310020
48262
137373
Payload would be
31002048262#137373
I think these are being written to NVRAM through the raw ril requests
There might be another value that controls whether the region/network lock is on at all. Maybe if we just set it to an empty string, it will turn off?
I know that the app RegionLockAway works somewhat like this. It makes changes to the CSC file and then invokes CSC.apk to send the changes to the modem.

Related

Strace for Android

Everybody loves strace !
So am I, thats why I compiled a static one you can use on any Android or even.. any ARM Linux system
It's unmodified, compiled with buildroot.
Download it here:
http://project-voodoo.org/downloads/dev-tools/debug/strace.tar.gz
Sample output:
Code:
$ strace ls
execve("/system/bin/ls", ["ls"], [/* 13 vars */]) = 0
set_tls(0xb00182ec, 0, 0xbedd3d14, 0xc, 0xb000c448) = 0
getpid() = 6712
sigaction(SIGILL, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0xb000c448) = 0
sigaction(SIGABRT, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
sigaction(SIGBUS, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
sigaction(SIGFPE, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
sigaction(SIGSEGV, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
sigaction(SIGSTKFLT, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
sigaction(SIGPIPE, {0xb0003441, [], SA_RESTART}, {SIG_DFL, , 0) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
stat64("/system/lib/liblog.so", {st_mode=S_IFREG|0644, st_size=13524, ...}) = 0
open("/system/lib/liblog.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 10, SEEK_SET) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\[email protected]\17\0\0004\0\0\0$"..., 4096) = 4096
lseek(3, 10, SEEK_END) = 13516
read(3, "\0\0\240\257PRE "..., 8) = 8
mmap2(0xafa00000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xafa00000
mmap2(0xafa00000, 10716, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xafa00000
mprotect(0xafa00000, 12288, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0xafa03000, 372, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x3) = 0xafa03000
close(3) = 0
stat64("/system/lib/libc.so", {st_mode=S_IFREG|0644, st_size=278276, ...}) = 0
open("/system/lib/libc.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 10, SEEK_SET) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0p\266\0\0004\0\0\0<"..., 4096) = 4096
lseek(3, 10, SEEK_END) = 278268
read(3, "\0\0\320\257PRE "..., 8) = 8
mmap2(0xafd00000, 323584, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xafd00000
mmap2(0xafd00000, 265380, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xafd00000
mprotect(0xafd00000, 266240, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0xafd41000, 10028, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x41) = 0xafd41000
mmap2(0xafd44000, 43648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xafd44000
close(3) = 0
mprotect(0xafd00000, 266240, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
gettid() = 6712
set_tls(0xafd4a86c, 0xafd4a830, 0, 0x40, 0xafd42328) = 0
mmap2(NULL, 32768, PROT_READ, MAP_SHARED, 9, 0) = 0x40000000
open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3
read(3, "\301%\364\320"..., 4) = 4
close(3) = 0
stat64("/system/lib/libstdc++.so", {st_mode=S_IFREG|0644, st_size=5272, ...}) = 0
open("/system/lib/libstdc++.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 10, SEEK_SET) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0X\10\0\0004\0\0\0\350"..., 4096) = 4096
lseek(3, 10, SEEK_END) = 5264
read(3, "\0\0\300\257PRE "..., 8) = 8
mmap2(0xafc00000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xafc00000
mmap2(0xafc00000, 2864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xafc00000
mprotect(0xafc00000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0xafc01000, 232, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1) = 0xafc01000
close(3) = 0
mprotect(0xafc00000, 4096, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
stat64("/system/lib/libm.so", {st_mode=S_IFREG|0644, st_size=91088, ...}) = 0
open("/system/lib/libm.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 10, SEEK_SET) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\250\34\0\0004\0\0\0p"..., 4096) = 4096
lseek(3, 10, SEEK_END) = 91080
read(3, "\0\0\260\257PRE "..., 8) = 8
mmap2(0xafb00000, 94208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xafb00000
mmap2(0xafb00000, 87548, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xafb00000
mprotect(0xafb00000, 90112, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0xafb16000, 208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x16) = 0xafb16000
close(3) = 0
mprotect(0xafb00000, 90112, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
mprotect(0xafa00000, 12288, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
stat64("/system/lib/libcutils.so", {st_mode=S_IFREG|0644, st_size=59364, ...}) = 0
open("/system/lib/libcutils.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 10, SEEK_SET) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0d1\0\0004\0\0\0\f"..., 4096) = 4096
lseek(3, 10, SEEK_END) = 59356
read(3, "\0\0\220\257PRE "..., 8) = 8
mmap2(0xaf900000, 122880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xaf900000
mmap2(0xaf900000, 55296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xaf900000
mprotect(0xaf900000, 57344, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0xaf90e000, 1100, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xe) = 0xaf90e000
mmap2(0xaf90f000, 57764, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xaf90f000
close(3) = 0
mprotect(0xaf900000, 57344, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
mprotect(0x8000, 77824, PROT_READ|PROT_EXEC) = 0
getuid32() = 0
geteuid32() = 0
getgid32() = 2000
getegid32() = 2000
lstat64(".", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
brk(0) = 0x20000
brk(0x20000) = 0x20000
brk(0x22000) = 0x22000
open(".", O_RDONLY|O_LARGEFILE|O_DIRECTORY) = 3
getdents64(3, /* d_reclen == 0, problem here *//* 1 entries */, 4200) = 904
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40008000
mprotect(0x40008000, 4096, PROT_READ) = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "config\n"..., 7config
) = 7
write(1, "efs\n"..., 4efs
) = 4
write(1, "sdcard\n"..., 7sdcard
) = 7
write(1, "acct\n"..., 5acct
) = 5
write(1, "mnt\n"..., 4mnt
) = 4
write(1, "d\n"..., 2d
) = 2
write(1, "etc\n"..., 4etc
) = 4
write(1, "default.prop\n"..., 13default.prop
) = 13
write(1, "dbdata\n"..., 7dbdata
) = 7
write(1, "cache\n"..., 6cache
) = 6
write(1, "init.smdkc110.rc\n"..., 17init.smdkc110.rc
) = 17
write(1, "lib\n"..., 4lib
) = 4
write(1, "usr\n"..., 4usr
) = 4
write(1, "data\n"..., 5data
) = 5
write(1, "res\n"..., 4res
) = 4
write(1, "modules\n"..., 8modules
) = 8
write(1, "sbin\n"..., 5sbin
) = 5
write(1, "bin\n"..., 4bin
) = 4
write(1, "init.goldfish.rc\n"..., 17init.goldfish.rc
) = 17
write(1, "sys\n"..., 4sys
) = 4
write(1, "init\n"..., 5init
) = 5
write(1, "init_samsung\n"..., 13init_samsung
) = 13
write(1, "recovery.rc\n"..., 12recovery.rc
) = 12
write(1, "dev\n"..., 4dev
) = 4
write(1, "init.rc\n"..., 8init.rc
) = 8
write(1, "voodoo\n"..., 7voodoo
) = 7
write(1, "fota.rc\n"..., 8fota.rc
) = 8
write(1, "lpm.rc\n"..., 7lpm.rc
) = 7
write(1, "proc\n"..., 5proc
) = 5
write(1, "system\n"..., 7system
) = 7
getdents64(3, 0x20018, 4200out of memory
) = 0
close(3) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ) = 0
munmap(0x40008000, 4096) = 0
exit_group(0) = ?
PS: Sorry if this was done before, i didn't found one easily.
Thanks! strace is a usefull debug tool!
bwt, i compiled strace (4.6) too
lovetide said:
Thanks! strace is a usefull debug tool!
bwt, i compiled strace (4.6) too
Click to expand...
Click to collapse
Hello, the link is now dead, do you recent version 4.6 or 4.7 statically linked?

[UTILITY] STrace 4.8 - Ultimate debugging utility now ported to Android !

about Strace
Android provides Logcat for tracing and debugging Apps , Logcat provides too short information and limited apps also programs has to support logcat or there wo'nt be any log ! this makes Android logcar be completely un-useful in large/advanced programs .
strace is a debugging utility to monitor a program system calls or signals it receives . strace is used while we want to find the reason a program crashes or finding out what causes a process not to work as expected .
strace is much more powerful than Android Logcat . unlike logcat , any process may be monitored by strace also there is no need to rewrite a program for support of strace
usage & downloading
I have ported strace to Android and it works without any bugs
download the lastest binary from this post , move it to /system/bin and set permissions to 755 .
strace has a lot of options you can find by running it using :
Code:
strace --help
most common functions are :
1- using strace to monitor a command :
Code:
strace echo hello
2- using strace to monitor an App/process :
Code:
strace -p 123
(123 is a example , use any other PID you wish )
here is an example of running strace with hello command :
Code:
ALIREZA | strace echo hello
execve("/system/xbin/echo", ["echo", "hello"], [/* 26 vars */]) = 0
mprotect(0x4005d000, 75164, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mprotect(0x4005d000, 77824, PROT_READ|PROT_EXEC) = 0
mprotect(0x40070000, 4096, PROT_READ) = 0
gettid() = 31648
set_tls(0x40080f6c, 0x40080f30, 0x40081068, 0x40, 0x40080f30) = 0
getpid() = 31648
sigaction(SIGILL, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGABRT, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGBUS, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGFPE, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGSEGV, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGSTKFLT, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
sigaction(SIGPIPE, {0x40062ba1, [], SA_RESTART|SA_SIGINFO}, NULL, 0x397a4) = 0
mprotect(0x8000, 500100, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
stat64("/vendor/lib/libc.so", 0xbea736b8) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libc.so", {st_mode=S_IFREG|0644, st_size=286596, ...}) = 0
open("/system/lib/libc.so", O_RDONLY) = 7
lseek(7, 0, SEEK_SET) = 0
read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
lseek(7, -8, SEEK_END) = 286588
read(7, "\1\0\0\0\0\0\0\0", 8) = 8
mmap2(NULL, 331776, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x400f7000
madvise(0x400f7000, 331776, 0xc /* MADV_??? */) = 0
mmap2(0x400f7000, 271932, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x400f7000
madvise(0x400f7000, 271932, 0xc /* MADV_??? */) = 0
mprotect(0x400f7000, 274432, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x4013a000, 10344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x43) = 0x4013a000
madvise(0x4013a000, 10344, 0xc /* MADV_??? */) = 0
mmap2(0x4013d000, 45051, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4013d000
madvise(0x4013d000, 45051, 0xc /* MADV_??? */) = 0
close(7) = 0
mprotect(0x400f7000, 274432, PROT_READ|PROT_EXEC) = 0
stat64("/vendor/lib/liblog.so", 0xbea736b8) = -1 ENOENT (No such file or directory)
stat64("/system/lib/liblog.so", {st_mode=S_IFREG|0644, st_size=13536, ...}) = 0
open("/system/lib/liblog.so", O_RDONLY) = 7
lseek(7, 0, SEEK_SET) = 0
read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
lseek(7, -8, SEEK_END) = 13528
read(7, "\1\0\0\0\0\0\0\0", 8) = 8
mmap2(NULL, 20480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4000d000
madvise(0x4000d000, 20480, 0xc /* MADV_??? */) = 0
mmap2(0x4000d000, 11235, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x4000d000
madvise(0x4000d000, 11235, 0xc /* MADV_??? */) = 0
mprotect(0x4000d000, 12288, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40010000, 4116, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x2) = 0x40010000
madvise(0x40010000, 4116, 0xc /* MADV_??? */) = 0
close(7) = 0
stat64("/vendor/lib/libstdc++.so", 0xbea73618) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libstdc++.so", {st_mode=S_IFREG|0644, st_size=5336, ...}) = 0
open("/system/lib/libstdc++.so", O_RDONLY) = 7
lseek(7, 0, SEEK_SET) = 0
read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
lseek(7, -8, SEEK_END) = 5328
read(7, "\1\0\0\0\0\0\0\0", 8) = 8
mmap2(NULL, 12288, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40082000
madvise(0x40082000, 12288, 0xc /* MADV_??? */) = 0
mmap2(0x40082000, 2656, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x40082000
madvise(0x40082000, 2656, 0xc /* MADV_??? */) = 0
mprotect(0x40082000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40083000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x40083000
madvise(0x40083000, 4096, 0xc /* MADV_??? */) = 0
mmap2(0x40084000, 16, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40084000
madvise(0x40084000, 16, 0xc /* MADV_??? */) = 0
close(7) = 0
mprotect(0x40082000, 4096, PROT_READ|PROT_EXEC) = 0
mprotect(0x40083000, 4096, PROT_READ) = 0
stat64("/vendor/lib/libm.so", 0xbea73618) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libm.so", {st_mode=S_IFREG|0644, st_size=91288, ...}) = 0
open("/system/lib/libm.so", O_RDONLY) = 7
lseek(7, 0, SEEK_SET) = 0
read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
lseek(7, -8, SEEK_END) = 91280
read(7, "\1\0\0\0\0\0\0\0", 8) = 8
mmap2(NULL, 98304, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x400d8000
madvise(0x400d8000, 98304, 0xc /* MADV_??? */) = 0
mmap2(0x400d8000, 85924, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x400d8000
madvise(0x400d8000, 85924, 0xc /* MADV_??? */) = 0
mprotect(0x400d8000, 86016, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x400ee000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x15) = 0x400ee000
madvise(0x400ee000, 4096, 0xc /* MADV_??? */) = 0
mmap2(0x400ef000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x400ef000
madvise(0x400ef000, 32, 0xc /* MADV_??? */) = 0
close(7) = 0
mprotect(0x400d8000, 86016, PROT_READ|PROT_EXEC) = 0
mprotect(0x400ee000, 4096, PROT_READ) = 0
mprotect(0x4000d000, 12288, PROT_READ|PROT_EXEC) = 0
mprotect(0x40010000, 4096, PROT_READ) = 0
stat64("/vendor/lib/libcutils.so", 0xbea736b8) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libcutils.so", {st_mode=S_IFREG|0644, st_size=63252, ...}) = 0
open("/system/lib/libcutils.so", O_RDONLY) = 7
lseek(7, 0, SEEK_SET) = 0
read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
lseek(7, -8, SEEK_END) = 63244
read(7, "\1\0\0\0\0\0\0\0", 8) = 8
mmap2(NULL, 126976, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40148000
madvise(0x40148000, 126976, 0xc /* MADV_??? */) = 0
mmap2(0x40148000, 58972, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0x40148000
madvise(0x40148000, 58972, 0xc /* MADV_??? */) = 0
mprotect(0x40148000, 61440, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40157000, 4620, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0xe) = 0x40157000
madvise(0x40157000, 4620, 0xc /* MADV_??? */) = 0
mmap2(0x40159000, 57096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40159000
madvise(0x40159000, 57096, 0xc /* MADV_??? */) = 0
close(7) = 0
mprotect(0x40148000, 61440, PROT_READ|PROT_EXEC) = 0
mprotect(0x40157000, 4096, PROT_READ) = 0
mprotect(0x8000, 503808, PROT_READ|PROT_EXEC) = 0
mmap2(NULL, 49152, PROT_READ, MAP_SHARED, 8, 0) = 0x400a4000
futex(0x40140734, FUTEX_WAKE_PRIVATE, 2147483647) = 0
open("/dev/urandom", O_RDONLY) = 7
read(7, "@\236", 4) = 4
close(7) = 0
clock_gettime(CLOCK_MONOTONIC, {29544, 299349465}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40167000
madvise(0x40167000, 4096, 0xc /* MADV_??? */) = 0
mprotect(0x40167000, 4096, PROT_READ) = 0
getuid32() = 0
brk(0) = 0xf0d000
brk(0xf0d000) = 0xf0d000
brk(0xf0e000) = 0xf0e000
write(1, "hello\n", 6hello
) = 6
mprotect(0x40167000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40167000, 4096, PROT_READ) = 0
futex(0x4014072c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
munmap(0x40167000, 4096) = 0
exit_group(0) = ?
and now lastest download link :
Download Strace 4.8 from here
license
strace is a free software, you may download source of strace from here
Only 4 downloads ?!
Segfault any attemp to use it!
Running on LG P500 (ARMv6) cm-10.2
OK, guess what? Already have it on /system/xbin and that does work.
Very nice tool/utility man.....
will try it to solve issues on my roms...
thanks man :good:
regards,
abhi922.
abhi922 said:
Very nice tool/utility man.....
will try it to solve issues on my roms...
thanks man :good:
regards,
abhi922.
Click to expand...
Click to collapse
Dido, I needed such a tool too.
Thanks
Would like to try it, but the download link requires me to sign up for an account. Can't you make this available some other way?
you dont need an account to download. Between the 2 ads is the download button
SVLAN said:
you dont need an account to download. Between the 2 ads is the download button
Click to expand...
Click to collapse
Thanks, I got it! I really hate these purposely misleading download sites.
Once i run strace -p 123 it will come back
Code:
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
SVLAN said:
Once i run strace -p 123 it will come back
Code:
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Click to expand...
Click to collapse
I said :
(123 is a example , use any other PID you wish )
Click to expand...
Click to collapse
You must use the a valid PID , 123 is an example .
For getting PID of an APP/Process , use the this command in terminal :
Code:
ps | grep "abc"
instead of abc , write the process name you want ! for example :
Code:
ps | grep "com.android.acore"
then search for PID in the output and use it with strace !
SVLAN said:
Once i run strace -p 123 it will come back
Code:
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Click to expand...
Click to collapse
You need to be root to attach to already running processes.
I also find the "-f" option useful for more complex executables (which fork new processes). "-o" to write the output to a file can be useful if there is much output.
@alireza7991
Can I use this in the tool in my signature please?
Lgrootnoob said:
@alireza7991
Can I use this in the tool in my signature please?
Click to expand...
Click to collapse
This is a free software , You must accept the GNU Public Licence v2 ( or higher ) terms ; after that , you are allowed to use it .
alireza7991 said:
This is a free software , You must accept the GNU Public Licence v2 ( or higher ) terms ; after that , you are allowed to use it .
Click to expand...
Click to collapse
Sweet!
Huh? It's a well-known, standard unix utility, being a part of Android distribution since Android 1.6 (although, only in debug builds)...
See https://android.googlesource.com/platform/external/strace/ (note all the branches on the left)
It's good to make people aware of it, though, as it's a very useful tool for debugging some kinds of issues.
tom3q said:
Huh? It's a well-known, standard unix utility, being a part of Android distribution since Android 1.6 (although, only in debug builds)...
See https://android.googlesource.com/platform/external/strace/ (note all the branches on the left)
It's good to make people aware of it, though, as it's a very useful tool for debugging some kinds of issues.
Click to expand...
Click to collapse
I haven't seen it, but its just in android sources and only in debug builds for debugging the android but This is a standalone build of latest STrace suitable for developers to debug their APPs . Developers will not download and compile whole android for just having a dynamicly linked strace .
Another thing , why most of you are saying its a well-known/popular linux utility ... , did I say it is not ????
Segfaults on Razr i (intel atom x86).
alireza7991 said:
I haven't seen it, but its just in android sources and only in debug builds for debugging the android but This is a standalone build of latest STrace suitable for developers to debug their APPs . Developers will not download and compile whole android for just having a dynamicly linked strace .
Another thing , why most of you are saying its a well-known/popular linux utility ... , did I say it is not ????
Click to expand...
Click to collapse
But that's something that's popular to do here, a lot of people download the sources and compile the ROMs they run from source. Additionally, this is probably included in every custom ROM out there. My CM10.2 install has the utility built in.
There's no need to be defensive, the RD that's replying to you is just providing links for more reading. The better informed the users of this site are, the more cool stuff we'll see in the future.
Thanks for your strace build!
r3tr0g4m3r said:
Segfaults on Razr i (intel atom x86).
Click to expand...
Click to collapse
This does not work on X86 based platforms.
There're quite a few blog posts on the net about compiling strace from source.
Eg. http://discuz-android.blogspot.com/2008/01/create-google-android-strace-tool.html
I've created a precompiled tgz package that you can extract into the root of your filesystem and it'll put strace into /data/local (i.e. /data/local/bin/strace).
http://muzso.hu/node/4869
I prefer my utilities in /data/local.

[Q] Compiling CM 12.1 Error

Hi,
I tried to build my own rom with the tutorial for the 1+1 of cynogenmod.
The first built was fine, so I wanted to change the toolchain for compiling the new built with SABERMOD.
This is what I done so far :
- git clone -b master https://github.com/SaberMod/android_prebuilts_gcc_linux-x86_arm_sabermod-arm-linux-androideabi-4.9 prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-SM-4.9
- built/envsetup.sh =
Code:
export ANDROID_TOOLCHAIN_2ND_ARCH=
local ARCH=$(get_build_var TARGET_ARCH)
case $ARCH in
x86) toolchaindir=x86/x86_64-linux-android-$targetgccversion/bin
;;
x86_64) toolchaindir=x86/x86_64-linux-android-$targetgccversion/bin
;;
arm) toolchaindir=arm/arm-linux-androideabi-SM-4.9/bin
;;
arm64) toolchaindir=aarch64/aarch64-linux-android-$targetgccversion/bin;
toolchaindir2=arm/arm-linux-androideabi-$targetgccversion2/bin
;;
mips|mips64) toolchaindir=mips/mips64el-linux-android-$targetgccversion/bin
;;
*)
echo "Can't find toolchain for unknown architecture: $ARCH"
toolchaindir=xxxxxxxxx
;;
Code:
unset ANDROID_KERNEL_TOOLCHAIN_PATH
case $ARCH in
arm)
# Legacy toolchain configuration used for ARM kernel compilation
toolchaindir=arm/arm-eabi-SM-4.9/bin
if [ -d "$gccprebuiltdir/$toolchaindir" ]; then
export ARM_EABI_TOOLCHAIN="$gccprebuiltdir/$toolchaindir"
ANDROID_KERNEL_TOOLCHAIN_PATH="$ARM_EABI_TOOLCHAIN":
fi
;;
- repo sync and other "pre-steps"
-brunch bacon
After 45 minutes I was getting this error:
Code:
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/root/android/system/kernel/oneplus/msm8974'
make: *** [TARGET_KERNEL_BINARIES] Error 2
make: *** Waiting for unfinished jobs....
warning: unknown warning option '-Wno-unused-local-typedef' [-Wunknown-warning-option]
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:166:21: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
for (int i = 0; i < parts.size() - 1; i++) {
~ ^ ~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:533:25: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < data_.size(); i++) {
~ ^ ~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:615:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < proto_path_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:633:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < input_files_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:655:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < output_directives_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:745:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < input_files_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:925:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parts.size(); i++) {
~ ^ ~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1209:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1238:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1371:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1377:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
12 warnings generated.
warning: unknown warning option '-Wno-unused-local-typedef' [-Wunknown-warning-option]
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/plugin.cc:136:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
2 warnings generated.
#### make failed to build some targets (45:19 (mm:ss)) ####
Looks like an kernel compiling error, but I dont know how to fix it .
Maybe someone can help me out of this.
n00del said:
Hi,
I tried to build my own rom with the tutorial for the 1+1 of cynogenmod.
The first built was fine, so I wanted to change the toolchain for compiling the new built with SABERMOD.
This is what I done so far :
- git clone -b master https://github.com/SaberMod/android_prebuilts_gcc_linux-x86_arm_sabermod-arm-linux-androideabi-4.9 prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-SM-4.9
- built/envsetup.sh =
Code:
export ANDROID_TOOLCHAIN_2ND_ARCH=
local ARCH=$(get_build_var TARGET_ARCH)
case $ARCH in
x86) toolchaindir=x86/x86_64-linux-android-$targetgccversion/bin
;;
x86_64) toolchaindir=x86/x86_64-linux-android-$targetgccversion/bin
;;
arm) toolchaindir=arm/arm-linux-androideabi-SM-4.9/bin
;;
arm64) toolchaindir=aarch64/aarch64-linux-android-$targetgccversion/bin;
toolchaindir2=arm/arm-linux-androideabi-$targetgccversion2/bin
;;
mips|mips64) toolchaindir=mips/mips64el-linux-android-$targetgccversion/bin
;;
*)
echo "Can't find toolchain for unknown architecture: $ARCH"
toolchaindir=xxxxxxxxx
;;
Code:
unset ANDROID_KERNEL_TOOLCHAIN_PATH
case $ARCH in
arm)
# Legacy toolchain configuration used for ARM kernel compilation
toolchaindir=arm/arm-eabi-SM-4.9/bin
if [ -d "$gccprebuiltdir/$toolchaindir" ]; then
export ARM_EABI_TOOLCHAIN="$gccprebuiltdir/$toolchaindir"
ANDROID_KERNEL_TOOLCHAIN_PATH="$ARM_EABI_TOOLCHAIN":
fi
;;
- repo sync and other "pre-steps"
-brunch bacon
After 45 minutes I was getting this error:
Code:
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/root/android/system/kernel/oneplus/msm8974'
make: *** [TARGET_KERNEL_BINARIES] Error 2
make: *** Waiting for unfinished jobs....
warning: unknown warning option '-Wno-unused-local-typedef' [-Wunknown-warning-option]
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:166:21: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
for (int i = 0; i < parts.size() - 1; i++) {
~ ^ ~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:533:25: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < data_.size(); i++) {
~ ^ ~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:615:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < proto_path_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:633:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < input_files_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:655:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < output_directives_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:745:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < input_files_.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:925:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parts.size(); i++) {
~ ^ ~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1209:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1238:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1371:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:1377:23: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
12 warnings generated.
warning: unknown warning option '-Wno-unused-local-typedef' [-Wunknown-warning-option]
external/chromium_org/third_party/protobuf/src/google/protobuf/compiler/plugin.cc:136:21: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned int') [-Wsign-compare]
for (int i = 0; i < parsed_files.size(); i++) {
~ ^ ~~~~~~~~~~~~~~~~~~~
2 warnings generated.
#### make failed to build some targets (45:19 (mm:ss)) ####
Looks like an kernel compiling error, but I dont know how to fix it .
Maybe someone can help me out of this.
Click to expand...
Click to collapse
Try another toolchain for the right CPU for you ..its solved your Problem ?
Have you setup the toolchain for the kernel correctly before you Start the compile?

Where can I go from this de-bricking QD Load error?

{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
https://github.com/jcsullins/qdloader/blob/master/qdload.pl#L613
Line 613 is where this occurs.
Whenever I try and flash things over Linux using qdload.pl this error is the result. Linux right now is my only option for debricking my device, since none of the windows applications are capable of removing it from the state that it is in.
The msm8974 downloader tools and their variants, along with tools like qpst are all capable of rebuilding partition tables and any damage that may have been done to the emmc as far as I'm aware, since I got my friend to wipe everything through twrp commands on his OPO and the ColorOs Download tool fully restored him from that state.
What I'm hoping is that someone can create a script I can use in linux that is capable of formatting /dev/ on my device and 'unblocking' whatever it is that is holding all these tools back so to speak. Any help at all is greatly
appreciated.
Please don't repost the various hardbrick tutorials, I've seen enough of them, and no, those tools aren't capable of fixing my device.
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use Fcntl;
$| = 1;
my @crcTable = (
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
);
sub writeMagic {
my $fd = shift;
return undef
if (
!sendPacket(
$fd,
deserialize(
"01 51 43 4f 4d 20 66 61 73 74 20 64 6f 77 6e 6c 6f 61 64 20 70 72 6f 74 6f 63 6f 6c 20 68 6f 73 74 03 03 09"
)
)
);
return 1;
}
sub writeChunk {
my $fd = shift;
my $address = shift;
my $chunk = shift;
my $length = length($chunk);
my $response;
#print "Writing chunk...\n";
if (
!sendPacket(
$fd,
deserialize(
"0f "
. serial32($address) . " "
. serial16($length) . " "
. serialize($chunk)
)
)
)
{
print "Failed to send chunk.\n";
return undef;
}
if ( !( $response = readPacket( $fd, 2.0 ) ) ) {
print "Failed to get response.\n";
return undef;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 1 || $responseBytes[0] != 2 ) {
print "Invalid Response: ", serialize($response), "\n";
return undef;
}
return 1;
}
sub writeChunk2 {
my $fd = shift;
my $address = shift;
my $chunk = shift;
my $sentPacketsRef = shift;
my $length = length($chunk);
my $response;
#print "Writing chunk...\n";
if (
!sendPacket(
$fd,
deserialize(
"07 " . serial32le($address) . " " . serialize($chunk)
)
)
)
{
print "Failed to send chunk.\n";
return undef;
}
$sentPacketsRef->{ sprintf( "%0.8x", $address ) } = 1;
my $outstanding = scalar keys %{$sentPacketsRef};
my $acktimeout;
if ( $outstanding > 8 ) {
$acktimeout = 2.0;
}
elsif ( $outstanding > 4 ) {
$acktimeout = 0.25;
}
else {
$acktimeout = 0.01;
}
$acktimeout = 10.0;
while ( $response = readPacket( $fd, $acktimeout ) ) {
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 5 || $responseBytes[0] != 8 ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
my $ackpacket;
$ackpacket = sprintf(
'%.2x%.2x%.2x%.2x',
$responseBytes[4], $responseBytes[3],
$responseBytes[2], $responseBytes[1]
);
delete $sentPacketsRef->{$ackpacket};
$outstanding = scalar keys %{$sentPacketsRef};
print "Response: ACK 0x", $ackpacket, " (outstanding: ",
$outstanding, ")\n";
if ( $outstanding == 0 ) {
$acktimeout = 0.0001;
}
}
return 1;
}
sub uploadFile {
my $fd = shift;
my $address = shift;
my $filename = shift;
local $/ = undef;
return undef if ( !open( FILE, $filename ) );
my $data = <FILE>;
close FILE;
while ( length $data ) {
my $chunk = substr( $data, 0, 1024 );
my $restOfData =
substr( $data, length($chunk), length($data) - length($chunk) );
print "Writing ", length($chunk), " bytes to 0x",
sprintf( '%.8x', $address ), "; ", length($restOfData),
" bytes left.\n";
if ( !writeChunk( $fd, $address, $chunk ) ) {
print "uploadFile failed.\n";
exit 1;
}
$address += length($chunk);
$data = $restOfData;
}
return 1;
}
sub uploadFile2 {
my $fd = shift;
my $address = shift;
my $filename = shift;
my $response;
my %sentPackets = ();
local $/ = undef;
return undef if ( !open( FILE, $filename ) );
my $data = <FILE>;
close FILE;
while ( length $data ) {
my $chunk = substr( $data, 0, 1024 );
my $restOfData =
substr( $data, length($chunk), length($data) - length($chunk) );
print "Writing ", length($chunk), " bytes to 0x",
sprintf( '%.8x', $address ), "; ", length($restOfData),
" bytes left.\n";
return undef
if ( !writeChunk2( $fd, $address, $chunk, \%sentPackets ) );
$address += length($chunk);
$data = $restOfData;
#select(undef, undef, undef, 0.1);
}
my $numout = scalar keys %sentPackets;
while ( $numout > 0 ) {
if ( !( $response = readPacket( $fd, 5.0 ) ) ) {
print "Failed to receive ACK for ", $numout, " packets\n";
foreach my $packet ( keys %sentPackets ) {
print "Outstanding: 0x", $packet, "\n";
}
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 5 || $responseBytes[0] != 8 ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
my $ackpacket;
$ackpacket = sprintf(
'%.2x%.2x%.2x%.2x',
$responseBytes[4], $responseBytes[3],
$responseBytes[2], $responseBytes[1]
);
delete $sentPackets{$ackpacket};
$numout = scalar keys %sentPackets;
print "Response: ACK 0x", $ackpacket, " (outstanding: ", $numout, ")\n";
}
return 1;
}
sub getSoftwareVersion {
my $fd = shift;
my $response;
return undef if ( !sendPacket( $fd, deserialize("0c") ) );
return undef if ( !( $response = readPacket($fd) ) );
my @responseBytes = unpack( 'C*', $response );
if ( $responseBytes[0] != 0x0d ) {
print "Invalid Response: ", serialize($response), "\n";
return undef;
}
return pack( 'C*',
map { hex } split( /\s/, serialize( substr( $response, 2 ) ) ) );
}
sub setupTTY {
my $tty;
my $fd;
my @usbDevices;
my @devices =
grep { !/\:/ && !/usb/ }
map { ( split( /\//, $_ ) )[-1] } glob '/sys/bus/usb/devices/*';
foreach my $device (@devices) {
my $product = getFile("/sys/bus/usb/devices/$device/idProduct");
my $vendor = getFile("/sys/bus/usb/devices/$device/idVendor");
next if ( !defined $product || !defined $vendor );
if ( $vendor eq '05c6' && $product eq '9008' ) {
# it's us.
my @drivers = grep /^$device:\d+\.\d+$/,
map { ( split( /\//, $_ ) )[-1] }
glob "/sys/bus/usb/devices/$device/$device:*";
foreach my $driver (@drivers) {
my @ttys =
map { ( split( /\//, $_ ) )[-1] }
glob "/sys/bus/usb/devices/$device/$driver/tty*";
if ( scalar @ttys == 1 ) {
$tty = "/dev/$ttys[0]";
}
}
}
}
if ( defined $tty ) {
system "/bin/stty raw -iexten -echo < $tty";
return undef if ( !sysopen( $fd, $tty, O_RDWR | O_SYNC ) );
return ( $fd, $tty );
}
return undef;
}
sub getFile {
my $file = shift;
local $/ = undef;
return undef if ( !open( FILE, $file ) );
my $content = <FILE>;
$/ = "\n";
close FILE;
chomp $content;
return $content;
}
sub execute {
my $fd = shift;
my $address = shift;
my $response;
if ( !sendPacket( $fd, deserialize( "05 " . serial32($address) ) ) ) {
print "Failed to send packed\n";
print "execute failed\n";
exit 1;
}
if ( !( $response = readPacket( $fd, 5.0 ) ) ) {
print "Failed to get response.\n";
print "execute failed\n";
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 1 || $responseBytes[0] != 2 ) {
print "Invalid Response: ", serialize($response), "\n";
print "execute failed\n";
exit 1;
}
return 1;
}
sub serialize {
my $buffer = shift;
return join( ' ', map { sprintf( '%.2x', $_ ) } unpack( 'C*', $buffer ) );
}
sub deserialize {
my $buffer = shift;
return pack( 'C*', map { hex } split( /\s+/, $buffer ) );
}
sub crcByte {
my $crc = shift;
my $c = shift;
return ( ( $crc >> 8 ) & 0xffff ) ^ $crcTable[ ( $crc ^ $c ) & 0xff ];
}
sub crc {
my $crc = shift;
my $buffer = shift;
my @bytes = unpack( 'C*', $buffer );
foreach (@bytes) {
$crc = crcByte( $crc, $_ );
}
return ~$crc & 0xffff;
}
sub swap16 {
my $short = shift;
return ( ( $short << 8 ) | ( $short >> 8 ) ) & 0xffff;
}
sub swap32 {
my $long = shift;
return ( ( $long << 24 ) | ( ( $long & 0xff00 ) << 8 ) |
( ( $long & 0xff0000 ) >> 8 ) | ( $long >> 24 ) );
}
sub setupPacket {
my $packet = shift;
my $crc = swap16( crc( 0xffff, $packet ) );
return deserialize( "7e "
. serialize( escape( $packet . deserialize( serial16($crc) ) ) )
. " 7e" );
}
sub escape {
my $buffer = shift;
my @bytes = unpack( 'C*', $buffer );
my @newBytes;
foreach my $byte (@bytes) {
if ( $byte == 0x7e ) {
push @newBytes, 0x7d;
push @newBytes, 0x5e;
}
elsif ( $byte == 0x7d ) {
push @newBytes, 0x7d;
push @newBytes, 0x5d;
}
else {
push @newBytes, $byte;
}
}
return pack( 'C*', @newBytes );
}
sub unescape {
my $buffer = shift;
my @bytes = unpack( 'C*', $buffer );
my @newBytes;
my $escape = 0;
foreach my $byte (@bytes) {
if ($escape) {
if ( $byte == 0x5e ) {
push @newBytes, 0x7e;
}
elsif ( $byte == 0x5d ) {
push @newBytes, 0x7d;
}
else {
print "Fatal error unescaping buffer!\n";
return undef;
}
$escape = 0;
}
else {
if ( $byte == 0x7d ) {
$escape = 1;
}
else {
push @newBytes, $byte;
}
}
}
return pack( 'C*', @newBytes );
}
sub serial16le {
my $short = shift;
my $lbyte = $short & 0xff;
my $hbyte = $short >> 8;
return sprintf( '%.2x %.2x', $lbyte, $hbyte );
}
sub serial32le {
my $long = shift;
my $lshort = $long & 0xffff;
my $hshort = $long >> 16;
return serial16le($lshort) . ' ' . serial16le($hshort);
}
sub serial16 {
my $short = shift;
my $lbyte = $short & 0xff;
my $hbyte = $short >> 8;
return sprintf( '%.2x %.2x', $hbyte, $lbyte );
}
sub serial32 {
my $long = shift;
my $lshort = $long & 0xffff;
my $hshort = $long >> 16;
return serial16($hshort) . ' ' . serial16($lshort);
}
sub readPacket {
my $fd = shift;
my $timeout = shift;
my $rfhbits = "";
my $byte;
if ( defined($timeout) ) {
vec( $rfhbits, fileno($fd), 1 ) = 1;
return undef unless select( $rfhbits, undef, undef, $timeout ) >= 0;
return undef unless vec( $rfhbits, fileno($fd), 1 );
}
my $retval = sysread( $fd, $byte, 1 );
if ( 0 && !$retval ) {
print "readPacket_retval: $retval\n";
print "$!\n";
}
return undef if ( !$retval );
return undef if ( unpack( 'C', $byte ) != 0x7e );
my @bytes;
while (1) {
$retval = sysread( $fd, $byte, 1 );
if ( !$retval ) {
if (0) {
print "retval (while): $retval\n";
print "$!\n";
}
return undef;
}
last if ( unpack( 'C', $byte ) == 0x7e );
push @bytes, unpack( 'C', $byte );
}
my $buffer = unescape( pack( 'C*', @bytes ) );
#print "RECEIVED: " . serialize($buffer) . "\n";
@bytes = unpack( 'C*', $buffer );
pop @bytes;
pop @bytes;
return deserialize( join( ' ', map { sprintf( '%.2x', $_ ) } @bytes ) );
}
sub sendPacket {
my $fd = shift;
my $buffer = shift;
#print "SENDING: ", serialize(setupPacket($buffer)), "\n";
my $retval =
syswrite( $fd, setupPacket($buffer), length( setupPacket($buffer) ) );
if ( !$retval ) {
print "$!\n";
}
return undef if ( !$retval );
return 1;
}
sub doMagic {
my $fd = shift;
my $response;
print "Sending MAGIC...\n";
writeMagic($fd);
my $haveGoodResponse = 0;
my $haveErrorResponse = 0;
my $haveUnknownResponse = 0;
while ( $response = readPacket( $fd, 2 ) ) {
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes > 35 && $responseBytes[0] == 0x02 ) {
my $magicCodeCheck = "QCOM fast download protocol targ";
my $magicCodeRecvd = substr( $response, 1, 32 );
if ( $magicCodeRecvd eq $magicCodeCheck ) {
$haveGoodResponse = 1;
}
}
elsif ( $responseBytes[0] == 0x0e ) {
# msg
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 1 ) ) ) );
$msg =~ tr/\n/ /;
$msg =~ tr/\r/ /;
print "MSG: ", $msg, "\n";
}
elsif ( $responseBytes[0] == 0x0d ) {
# error
$haveErrorResponse = 1;
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 5 ) ) ) );
$msg =~ tr/\n//d;
$msg =~ tr/\r//d;
print "ERROR: ", $msg, "\n";
}
else {
$haveUnknownResponse = 1;
print "Response: ", serialize($response), "\n";
}
}
if ( $haveGoodResponse != 1
|| $haveErrorResponse == 1
|| $haveUnknownResponse == 1 )
{
print "Invalid MAGIC response.\n";
exit 1;
}
}
sub doSoftwareVersion {
my $fd = shift;
my $response;
print "Requesting SoftwareVersion...\n";
my $swver = getSoftwareVersion($fd);
if ( !defined $swver ) {
print "Failed to get software version\n";
exit 1;
}
print "Version: $swver\n";
}
sub doRequestDload {
my $fd = shift;
my $response;
print "Requesting Dload...\n";
if ( !sendPacket( $fd, deserialize("3a") ) ) {
print "Failed requestDload\n";
exit 1;
}
print "requestDload send ok\n";
if ( !( $response = readPacket($fd) ) ) {
print "Failed to read response.\n";
exit 1;
}
print "Param: ", serialize($response), "\n";
}
sub doReboot {
my $fd = shift;
my $response;
print "Requesting Reboot...\n";
if ( !sendPacket( $fd, deserialize("0a") ) ) {
print "Failed requestReboot\n";
exit 1;
}
print "requestReboot send ok\n";
if ( !( $response = readPacket($fd) ) ) {
print "Failed to read response.\n";
exit 1;
}
print "Param: ", serialize($response), "\n";
}
sub doRequestParam {
my $fd = shift;
my $response;
print "Requesting Params...\n";
if ( !sendPacket( $fd, deserialize("07") ) ) {
print "Failed requestParam\n";
exit 1;
}
if ( !( $response = readPacket($fd) ) ) {
print "Failed to read response.\n";
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( $responseBytes[0] != 8 ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
print "Params: ", serialize( substr( $response, 1 ) ), "\n";
}
#####
##### second stage cmds
#####
sub doCloseFlush {
my $fd = shift;
my $response;
print "Sending CloseFlush...\n";
if ( !sendPacket( $fd, deserialize("15") ) ) {
print "Failed CloseFlush\n";
exit 1;
}
if ( !( $response = readPacket( $fd, 2.0 ) ) ) {
print "Failed to read response.\n";
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 1 || $responseBytes[0] != 0x16 ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
}
sub doSecureMode {
my $fd = shift;
my $response;
print "Sending secureMode...\n";
if ( !sendPacket( $fd, deserialize("17 01") ) ) {
print "Failed secureMode\n";
exit 1;
}
if ( !( $response = readPacket( $fd, 2.0 ) ) ) {
print "Failed to read response.\n";
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 1 || $responseBytes[0] != 0x18 ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
}
sub doOpenMulti {
my $fd = shift;
my $response;
print "Sending openMulti ...\n";
if ( !sendPacket( $fd, deserialize("1b 21") ) ) {
print "Failed openMulti\n";
exit 1;
}
my $haveGoodResponse = 0;
my $haveErrorResponse = 0;
my $haveUnknownResponse = 0;
while ( $response = readPacket( $fd, 2 ) ) {
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes == 2
&& $responseBytes[0] == 0x1c
&& $responseBytes[1] == 0 )
{
$haveGoodResponse = 1;
}
elsif ( $responseBytes[0] == 0x0e ) {
# msg
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 1 ) ) ) );
$msg =~ tr/\n/ /;
$msg =~ tr/\r/ /;
print "MSG: ", $msg, "\n";
}
elsif ( $responseBytes[0] == 0x0d ) {
# error
$haveErrorResponse = 1;
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 5 ) ) ) );
$msg =~ tr/\n//d;
$msg =~ tr/\r//d;
print "ERROR: ", $msg, "\n";
}
else {
$haveUnknownResponse = 1;
print "Response: ", serialize($response), "\n";
}
}
if ( $haveGoodResponse != 1
|| $haveErrorResponse == 1
|| $haveUnknownResponse == 1 )
{
print "Invalid openMulti response.\n";
exit 1;
}
}
sub doReset2 {
my $fd = shift;
my $response;
print "Requesting Reset...\n";
if ( !sendPacket( $fd, deserialize("0b") ) ) {
print "Failed doReset\n";
exit 1;
}
if ( !( $response = readPacket( $fd, 2.0 ) ) ) {
print "Failed to read response.\n";
exit 1;
}
my @responseBytes = unpack( 'C*', $response );
if ( scalar @responseBytes != 1 || $responseBytes[0] != 0x0c ) {
print "Invalid Response: ", serialize($response), "\n";
exit 1;
}
}
###
### main stages
###
sub doStage1 {
my $fname = shift;
my $retval;
my $response;
my ( $fd, $tty ) = setupTTY();
if ( !defined $fd ) {
print "Failed to find/open TTY.\n";
exit 1;
}
while ( $response = readPacket( $fd, 0.1 ) ) {
print "Ignoring response: ", serialize($response), "\n";
}
doSoftwareVersion($fd);
doRequestParam($fd);
print "Uploading file '", $fname, "' to QDLOAD...\n";
exit 1 if !defined( uploadFile( $fd, 0x2a000000, $fname ) );
print "Executing file...\n";
execute( $fd, 0x2a000000 );
close($fd);
}
sub doStage2 {
my $laddr = shift;
my $lfname = shift;
my $retval;
my $response;
my ( $fd, $tty ) = setupTTY();
if ( !defined $fd ) {
print "Failed to find/open TTY.\n";
exit 1;
}
doMagic($fd);
#closeFlush($fd);
doSecureMode($fd);
doOpenMulti($fd);
print "Uploading file '", $lfname, "'...\n";
uploadFile2( $fd, $laddr, $lfname );
doCloseFlush($fd);
###doReset2($fd);
close($fd);
}
sub doResetStage {
my $retval;
my $response;
my ( $fd, $tty ) = setupTTY();
if ( !defined $fd ) {
print "Failed to find/open TTY.\n";
exit 1;
}
doReset2($fd);
close($fd);
}
sub doTestCmd {
my $cmd = shift;
my $retval;
my $response;
my ( $fd, $tty ) = setupTTY();
if ( !defined $fd ) {
print "Failed to find/open TTY.\n";
exit 1;
}
doMagic($fd);
print "Sending cmd '", $cmd, "'\n";
if ( !sendPacket( $fd, deserialize($cmd) ) ) {
print "Failed send\n";
exit 1;
}
while ( $response = readPacket( $fd, 2 ) ) {
my @responseBytes = unpack( 'C*', $response );
if ( $responseBytes[0] == 0x0e ) {
# msg
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 1 ) ) ) );
$msg =~ tr/\n/ /;
$msg =~ tr/\r/ /;
print "MSG: ", $msg, "\n";
}
elsif ( $responseBytes[0] == 0x0d ) {
# error
my $msg = pack( 'C*',
map { hex }
split( /\s/, serialize( substr( $response, 5 ) ) ) );
$msg =~ tr/\n//d;
$msg =~ tr/\r//d;
print "ERROR: ", $msg, "\n";
}
else {
print "Response: ", serialize($response), "\n";
}
}
close($fd);
}
sub doUsage {
print "Usage: qdload --pfile <stage1_bin>\n";
print " | --lfile <stage2_file>\n";
print " | --lfile <stage2_file> --laddr <stage2_load_addr>\n";
print " | --lreset\n";
}
###
### main
###
my $opts_result;
my $opts_pfile;
my $opts_lfile;
my $opts_laddr;
my $opts_lreset;
my $opts_testcmd;
$opts_result = GetOptions(
"pfile=s" => \$opts_pfile,
"lfile=s" => \$opts_lfile,
"laddr=o" => \$opts_laddr,
"testcmd=s" => \$opts_testcmd,
"lreset" => \$opts_lreset
);
my $num_remaining_args = $#ARGV + 1;
if ( $num_remaining_args > 0 ) {
doUsage();
exit(1);
}
if ( !defined($opts_pfile)
&& !defined($opts_lfile)
&& !defined($opts_lreset)
&& !defined($opts_testcmd) )
{
doUsage();
exit(1);
}
if ( defined($opts_testcmd) ) {
doTestCmd($opts_testcmd);
exit(0);
}
if ( defined($opts_pfile) ) {
doStage1($opts_pfile);
sleep(2);
}
if ( defined($opts_lfile) ) {
my $addr = 0;
if ( defined($opts_laddr) ) {
$addr = $opts_laddr;
}
doStage2( $addr, $opts_lfile );
}
if ( defined($opts_lreset) ) {
doResetStage();
}
exit 0;
Bump. I really need some dev help with this :C
Bump again. I've found that whilst sitting idle, but undoubtedly "powered on" as far as I can tell the processor actually does get some warmth to it. Just a note since I had the back off.
Nobody, :/

MaviCin MultiTools QTR V2 ( Quandrostr )

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== MaviCin MultiTools QTR V1.9 (Developer = Quandrostr) === Turkish === English ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== Türkçe Tanım ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Bu kelimeler artık sizin için anlam bulacak hadi daha fazla düşünme proğramı indir ve hemen dene sende Android dünyasının içine dal Birşeyler yapmak hiç bukadar kolay ve sorunsuz olmamıştı hadi başlayalım
Apk , Rom , De O Dex , Odex , Deodex , Bat , Batch , Dex
Arsc , Raw , MultiTools , MaviCin , QTR , Classes , Resources
Smali , Baksmali , Signapk , Singin , zipalign , Jar , Adb , Root
Unroot , oat2dex , Log , Android , Apktool , Smali
App , Framework , Priv-app
DİLLER
Arabia
Belarusian
Chinese
English
French
German
Russian
Spanish
Turkish
Ukrainian
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== English Description ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
These words are now thinking more programs let you download and immediately try to find means to make you dive into the Android world, something did not always come easy and has never been smooth start
Apk, Rum, said He Dexin, Odex, Deodex, Bat, Batch, Dex
ARSC, Raw, Multitools, MaviCin, QT, Classes, Resources
S should, Look up, Signapur, Sing, zipalign, Jr., Adb, Root
Unroot, oat2dex, Logan, Android, Apktool must S
App Framework Prive in-app
LANGUAGES
Arabia
Belarusian
Chinese
English
French
German
Russian
Spanish
Turkish
Ukrainian
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== Not ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
NOT 1 : Olurda IniFile hatası alırsanız bu sizin 32 bit değil 64 bit bir sistem kullandığınızdan dolayıdır ve aşağıdaki adreslerden
IniFile nin adresine bakıp oradan 64 bit olan dosyayı indirip "bininifile.exe" dizinindeki dosyayı silip onu kopyalamanız sorunu çözecektir
NOT 2 : Lütfen açıklamaları dikkatlice okuyunuz ve karşılaştığınız sıkıntılar için mail atmaya çekinmeyiniz.Program "MaviCinMultiToolsV13Ultimate-Update6"
Programının üzerinden gidilerek az ve öz olması daha fazla insana hitap etmesi amacı güdülerek yazılmıştır "[email protected]" adresinden
yada internet sitelerinden "Quandrostr" adından bana ulaşabilirsiniz.
NOT 3 : Programı kullanabilmek için temiz bir Windows ve Java yazılımlarına ihtiyacınız vardır yava yazılımlarını
"http://www.java.com/tr/download/manual.jsp#win"
"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html"
"https://jdk9.java.net/download/"
Adreslerinden indirebilirsiniz unutmayınki Javanın "JRE ve JDK" yazılımlarının ikisinide kurmak sizin menfaatiniz içindir.
NOT 4 : Unutmayınki "MaviCin MultiTools QTR (Quandrostr)" yazılımı bir kople pakettir ve her fırsattada güncellenecektir. Güncellemelerin
Çıkıp çıkmadığını takip ederek en son "MaviCin MultiTools QTR (Quandrostr)" yazılımını kullanınız mutlaka
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== Note ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
NOTE 1: It's a mistake if you get Inifile this is not because you are using a system of 32-bit and 64-bit your address below
Ini look to the address to download the file from there with 64-bit "bin inifile.ex to" delete the files in the directory to copy it will solve the problem
NOTE 2: Please read the descriptions carefully and çekinmeyiniz.progra to take mail to the difficulties you encounter "mavicinmultitoolsv13ultimat to-Update6"
and be less self-propelled purpose by going through the program was written to appeal to more people, "[email protected] is" from
or from the website "Quandrost is" the name you can contact me.
NOTE 3: To use the program, you need to clean the slower Windows and Java software
"Http://www.java.com/tr/download/manual.jsp#w's"
"Http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html"
"Https://jdk9.java.net/download/"
Note that it can download from the address of Java "JRE and JDK" software install them both is for your benefit.
NOTE 4: Note that "MaviCin Multitools QT (the Quandrost)" software is a combi pack and will be updated every fırsatta. updates
Following out whether the latest "MaviCin Multitools QT (Quandrost is)" You must use the software
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== MaviCin MultiTools QTR V1.9 (Developer = Quandrostr) === Turkish === English ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
MaviCin MultiTools QTR V2
- Ufak düzenlemeler yapıldı.
MaviCin MultiTools QTR V2
- Small adjustments were made.
--------------------------------------------------------------------------------------------------------
=== Türkçe Tanım
MaviCin MultiTools QTR V1.9
- "MaviCinMultiToolsV13Ultimate-Update6" İçerisinden çok kullanılan özellikler "MaviCin MultiTools QTR V1.9" da toplandı
- Program ilk olarak "V1.9" versiyonu ile yayınlandı
- Programda kullanılan tüm yazılımlar son sürümleri ile güncellendi
- Arabia , Belarusian , Chinese , English , French , German , Russian , Spanish , Turkish , Ukrainian dilleri eklendi
- Uyğulama logosu eklendi
- Gereksiz görülen menüler çıkarılıp stabilizasyon yapıldı
- Pek çok hata düzeltmesi yapıldı
- Veritabanı eklenip seçmeli apktool , smali ve diger ayarlar eklendi
- Hakkında bölümü programa uyğun bir şekilde yeniden güncellendi
- Bug sıkıntıları giderildi
- Windows 10 desteği ilerletildi
- Tüm ayıklama modları birleştirildi
-|||- -|||- -|||- -|||- -|||-
=== English Description
MaviCin MultiTools QTR v1.9
- "MaviCinMultiToolsV13Ultimate-Update6" Within commonly used features "MaviCin MultiTools QTR v1.9" gathered
- The Program first "v1.9" version was released with the latest versions of all software used in the program-updated with
- Arabia , Belarusian, Chinese, English, French, German, Russian, Spanish, Turkish, Ukrainian languages added
- Added logo Overprints
- Unnecessary was whether stabilization menus seen
- Lots of error correction is made
- Added Database should I choose apktool, smali and sets the added
- Section has been updated again to the program
- Fixed Bug problems
- Support for Windows 10 escalated
- Merged All extraction modes
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== English (All of my application) - Turkish (Bütün Uygulamalarım) ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=== Turkish (İndirin-WinRAR 5.xx Kullanın) === English Download-(Use WinRAR 5.xx) ===
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Mod edit: links removed.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This tool is kanged from another tool.
Thread closed.

Categories

Resources