how to get root access on android 2.3 emulator - android-emulator

i am trying to get root access on my android emulator to run iptables. i went through many forums and tried many methods but nothing seems to work. the following is my device specification and i try everything on emulator.
version - 2.3
kernel version - 2.6.29-00261-g0097074-dirtydigit#digit #20
build number - sdk-eng 2.3 GRH55 79397 test-keys
so how to become root in the android. please help.

On the emulator provided with the SDK r10, you can get a root shell executing "adb shell" from your host computer. Once you have such root shell, you cat follow this steps to get a command that can log you as root from the terminal emulator:
# Remount /data to allow executables and setuids on it
mount -o remount,rw /dev/block/mtdblock1 /data
# There's no "cp" command on Android
cat /system/bin/sh > /data/su
# Give setuid permissions to the shell
chmod 7755 /data/su
Now, from the emulator, just run "/data/su" and that's it, you're root.
The normal "/system/xbin/su" command included in the SDK performs internal user id checks, so these commands...
mount -o remount,rw /dev/block/mtdblock0 /system
chmod 7755 /system/xbin/su
...just won't work. There's no way to trick /system/xbin/su to allow the normal user (UID 10018 in my case) to become root.
Please note that dealing with setuid programs can be a security risk (not higher than having a universal "su" command, though). Use this solution at your own risk.

Related

How to run uniCenta POS (Version 3.91.3) in Ubuntu 16.04?

I successfully installed uniCenta POS in 2 PCs: one with Ubuntu 15.10, and the other with Ubuntu 16.04, both with Spanish (Español) installations
(I downloaded and executed the installation with: unicentaopos-3.91.3-linux-x64-installer.run).
The program runs normally through the terminal with: sudo ./start.sh
Now I try to make a Desktop entry for the application:
I created a file called: Unicenta.desktop, located in: /usr/share/applications, with the content:
[Desktop Entry]
Name=Unicenta
Comment=Fires up Unicenta oPOS
Type=Application
Exec=/home/barmistias/unicentaopos-3.91.3/start.sh
Icon=/home/barmistias/unicentaopos-3.91.3/unicentaopos.ico
Terminal=false
At this stage, it doesn't create any icon & launcher (but it already should, right?)
The locations for the executable start.sh and the icon file are correct. Now, through the terminal, I try to turn the files into executables:
when I'm located in the folder: /usr/share/applications:
sudo chmod 775 ./Unicenta.desktop with ls -l I get: -rwxrwxr-x
and when I'm located in the folder: /home/barmistias/unicentaopos-3.91.3:
sudo chmod 775 ./start.sh with ls -l I get: -rwxrwxr-x
sudo chmod 777 ./unicentaopos.jar with ls -l I get: -rwxrwxrwx
Additionally, I put the right path in the start.sh file:
start uniCenta oPOS
java -cp $CP -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel -jar /home/barmistias/unicentaopos-3.91.3/unicentaopos.jar "$#"
So, it should work, but it doesn't. Additionally, if I turn the start.sh into executable by activating in properties: “Allow executing file as program”, the application launches differently (with the derby database deactivated, and unable to save a change to this setting. It only loops with the settings window, so it doesn't allow to get to the main window of the program).
So, in conclusion, how do I create a desktop icon that successfully and normally launches uniCenta POS (Version 3.91.3)?
Thanks for any help!
How do I create a desktop icon that successfully and normally launches uniCenta POS (Version 3.91.3)
Try this:
Create Unicenta.desktop in your Desktop directory (/home/barmistias/Desktop), just like you did above.
Change start.sh to launcher.sh from the Exec= line.
Create the file launcher.sh like so;
#!/bin/bash
cd /home/barmistias/unicentaopos-3.91.3/
./start.sh
Set execute permission for launcher.sh and Unicenta.desktop
Now test.
The guide was taken from this blog post
Also, searching for unicenta desktop shortcut not working solution yields helpful articles from Unicenta discussion pages and other blog posts.

Xcode - Passing Bash Commands With A Jailbroken Device

I'd like to know how it would be possible to execute bash commands on a jailbroken iOS device with Xcode? I'm not bothered about the code signing process because I already have a developer account.
I've tried using these 2 commands:
system("cd /var/mobile/Documents");
system("mkdir myNewFolder");
But Xcode returns "Cannot create directory, permission denied".
I know for definite that this is possible. Basically, I want to be using commands such as dpkg and apt commands.
Thanks in advance,
Declan
In UNIX like OS's like iOS you can use the 'Sudo' command to run as root.
To use in one line you need to use UNIX pipes like this:
system("echo yourPassword | sudo -S yourCommand");
You need to make sure sudo is installed on your device, not sure if it is by default.
Some more info here: On a jailbroken iPhone, how can I run commands as root?

schroot is giving error on centos 6

When I'm using command: schroot -c 32bit -- bash --login -c "rm -rf ~/SC32 ;"
I'm getting these errors:
E: 20copyfiles: cp: cannot create regular file `/var/lib/schroot/mount/32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce/etc/resolv.conf': No such file or directory
E: 32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce: Chroot setup failed: stage=setup-start
Since i'm new to Linux Environment i don't know what to do to solve this error.
The Cent OS which I'm using is 6.3 with x64 architecture
Also i have configured 32bit in /etc/schroot/schroot.conf as
[32bit]
type=directory
description=CentOS 6.3 32bit
directory=/chroot/32bit
users=temp
root-groups=root
personality=linux32
Also I Have this directory available /chroot/32bit
I'm not the root user of the system.
Can anybody tell me what to do to resolve this error?
To debug problems with schroot, try running it verbosely:
schroot -v
or to make it really verbose
schroot -v --debug=notice
The actual failure here is to copy /etc/resolv.conf. There are two potential reasons for this
The source file isn't copyable. Normally unlikely, but try cp and cat by hand to check.
The destination doesn't exist. This is the usual cause of such errors.
Your chroot is /chroot/32bit and it's being (bind) mounted on /var/lib/schroot/mount/32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce. If /chroot/32bit/etc does not exist, then /var/lib/schroot/mount/32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce/etc won't exist either, and so the copy operation will fail. You must have a proper system available under /chroot/32bit with all the usual directories (/bin, /etc, /lib etc.).
Assuming that you do have a proper chroot in /chroot/32bit, then something has gone wrong during setup. Running with verbose or debug messages enabled may shed some light on the cause of the failure.
Regards,
Roger
(schroot author)
I followed #Roger 's solution and all is well. But I found another workaround solution:
Enter your schroot directory, maybe like this location: /chroot/32bit, you can find this path in "/etc/schroot/schroot.conf" setting file.
cd /chroot/32bit
mv /chroot/32bit/etc/resolv.conf /chroot/32bit/etc/resolv.conf.bk
Then you can try your schroot login command and check is success.
schroot -c 32bit
(32bit)WDan#linux-buildy01:~$
Enjoy it!

Installing Meteor - Couldn't write the launcher script

I am front-end developer attempting to crossover into the world of web app development. I've come a long way in learning Javascript, and now I'm looking to toy around with frameworks.
I still have a bit to learn about using the OSX terminal, but I was hoping somebody could help me with this first stumble I'm having....
I try to install meteor using:
$ curl https://install.meteor.com | /bin/sh
Then I get the following:
Meteor 0.6.4 has been installed in your home directory (~/.meteor).
Writing a launcher script to /usr/local/bin/meteor for your convenience.
This may prompt for your password.
cp: /usr/local/bin/meteor: No such file or directory
Couldn't write the launcher script. Please either:
(1) Run the following as root:
cp ~/.meteor/tools/latest/launch-meteor /usr/bin/meteor
(2) Add ~/.meteor to your path, or
(3) Rerun this command to try again.
Then to get started, take a look at 'meteor --help' or see the docs at
docs.meteor.com.
If it's still helpful to anyone, going into /usr/local/bin, running "sudo rm meteor" then running the install gets it to work for me
Yeah try one of the three suggestions or:
sudo curl https://install.meteor.com | /bin/sh
I had the same problem heres how I fixed it!
Delete all meteor folders
In finder (cmd +shft+g)
type in "~/.meteor"
on the top of the finder window where is has the folder.meteor click and drag folder to trash
In finder (cmd +shft+g) type in "/usr/bin/meteor" then drag the meteor folder to trash
3.In /usr/ create a new folder "local" (password required) and inside "local" create a folder "bin"
Go back to terminal a run curl https://install.meteor.com | /bin/sh

How to get root access on Android emulator?

I have All Android SDK versions(from 1.5 to 2.3.3), and I tried many methods for getting root in Android emulator. I don't use any Android device and test everything on emulator(AVD).
I need to get root access in any one of the Android emulator to use the 'iptables' and 'busybox' functionality. And to use iptables I must have root access. Atleast 'su' command should execute in the terminal emulator.
I also installed z4root application,
But it takes very long time and doesn't finish rooting, and gets stuck. some say that if we downgrade the system to below RC30, this way we can get root access. if this is true, then how to do this? I use both Linux and Windows OS.
Please someone tell me any method to root my emulator.
If you have a virtual device with root access, this should do the job:
$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
If you don't, you might be interested in this answer to a different question, which explains how to create an virtual device with root access, with Google APIs (aka Google Play services), but without the Google Play app.
If you really need the Google Play app, you might be interested in other answers which instruct how to root an Android virtual device.
How to root android emulator (tested on Android 7.1.1/ Nougat)
Requirements:
SuperSU app (chainfire) latest version 2.82
Recovery flashable.zip (contains su binary) (Here is alternative backup link provided by XDA user Ibuprophen for flashable zips if the main link is not working: Flashable zip releases)
Instructions
Install the SuperSu.apk
Install the SuperSu app firstly, just do drag and drop (if running latest emulator version or sideload through adb i.e adb -e install supersu.apk)
After installing it, when you run it shows a screen as shown below indicating “There is no SU binary installed..”. This error just confirms the device is not yet rooted.
Make emulator’ system partition writable
As it suggests, we need to give the emulator permission to write system files.
Type the following code to accomplish this: emulator -avd {emulator_name} -writable-system
If you have more than one AVD, you can get a list of avds by using the command: emulator -list-avds
Note: Navigate to the tools folder where Android SDK is installed and open command prompt there by pressing shift and right clicking.
Pushing su binary in system directory
Extract the Recovery flashable.zip (containing the su binaries of different architectures)
Important! Only use the su binary that matches your avd architecture e.g x86, arm etc.., and note the path where you extracted these binaries.
Make sure you are running adb as root and also you need to remount.
Just enter these codes
adb root
adb remount
Now its time to push the su binary:
This is the code I successfully used: adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su
(nevermind about my specific location of su binary, any location is okay as long there is no white space)
note: To figure out bin or xbin do in console before: > adb shell, > ls /system/xbin/su
If this fails try this pushing to this directory instead /system/xbin/su. Also for emulators running android 5.1 and below use the su and not su.pie
Change permissions of the su binary
Next let’s do a bit of modification of the permissions of su binary. We have to do this in emulator device through adb:
adb -e shell
su root
cd /system/bin
chmod 06755 su
Important!! Take note of su binary path (mine is /system/bin)
Setting the install directive on su binary and set a daemon
Type the codes:
su --install
and for setting up daemon:
su --daemon&
Important!! Take note of spacing
Setting SELinux to Permissive(i.e turning off SE Linux)
Finally turn off selinux through this code:
setenforce 0
Open SuperSU app and it may ask to update binaries, you can use Normal method.
Note: If you're experiencing bootloops, rather don't update the binaries, just use it as it is.
That’s pretty much it!!
Open any application requiring SU permissions just to double check and indeed SuperSU ask if you wish to grant it su permissions.
To have the root persist update su binary (using Normal method), then copy system.img from temp directory (Users\AppData\Local\Temp\Android Emulator the file is usually randomly named e.g 1359g.tmp with a large size) and replace default system.img.
Update:
I have noted is is easier to obtain a temporary system image in Linux, than Windows. You can try using snapshot image.
##Update 4 August 2018
With the emergence of emulator 27.3.x it now makes preserving root much easier through snapshot feature (if copying the system.img method isn't working):
Ideally it is more like hibernarig the virtual device with config intact, hence everything is preserved.
Snapshots
You can now save multiple AVD snapshots for a given device
configuration and choose which of the saved snapshots to load when you
start the emulator. Starting a virtual device by loading a snapshot is
much like waking a physical from a sleep state, as opposed to booting
it from a powered-off state.
This implies the only requirement to start the emulator is adding the -writable-system parameter to the normal emulator -avd [avdname] command to start the emulator. (Running the emulator just with emulator -avd [avdname] doesn't launch the rooted version/copy or may lead to some error)
Tested on API level 22
Also for bootloop issues see the other post: Android Emulator: How to avoid boot loop after rooting? and updates thereof.
Remarks
Most content in reference was for older android versions and hence the reason for different commands and paths which I modified.
Acknowledgements;
Irvin H: Rooting the android emulator -on Android Studio 2.3((Android 4.4)
Android AVD root access fail.
Here is the list of commands you have to run while the emulator is running, I test this solution for an avd on Android 2.2 :
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system
adb push su /system/xbin/su
adb shell chmod 06755 /system
adb shell chmod 06755 /system/xbin/su
It assumes that the su binary is located in the working directory. You can find su and superuser here : http://forum.xda-developers.com/showthread.php?t=682828.
You need to run these commands each time you launch the emulator. You can write a script that launch the emulator and root it.
For AVD with 5.1.1 and 6.0 I used next script in windows:
set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system
exit /b
Need UPDATE.zip from SuperSU. Unpacked them to any folder. Create bat file with content above. Do not forget specify necessary architecture and device: set adb=adb -s emulator-5558 and set arch=x64. If you run Android above or equal 5.0, change set pie= to set pie=.pie. Run it. You get temporary root for current run.
If you got error on remount system partition then you need start AVD from command line. See below first step for Android 7.
If you want make it persistent - update binary in SuperSU and store system.img from temp folder as replace of default system.img.
How to convert the resulting temporary root on a permanent
First - it goes to SuperSu. It offers a binary upgrade. Update in the normal way. Reboot reject.
Second - only relevant for emulators. The same AVD. The bottom line is that changes in the system image will not be saved. You need to keep them for themselves.
There are already instructions vary for different emulators.
For AVD you can try to find a temporary file system.img, save it somewhere and use when you start the emulator.
In Windows it is located in the %LOCALAPPDATA%\Temp\AndroidEmulator and has a name something like TMP4980.tmp.
You copy it to a folder avd device (%HOMEPATH%\.android\avd\%AVD_NAME%.avd\), and renamed to the system.img.
Now it will be used at the start, instead of the usual. True if the image in the SDK is updated, it will have the old one.
In this case, you will need to remove this system.img, and repeat the operation on its creation.
More detailed manual in Russian: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931
For android 7 you need run additional steps:
1. Need run emulator manually.
Go to sdk folder sdk\tools\lib64\qt\lib.
Run from this folder emulator with options -writable-system -selinux disabled
Like this:
F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
You need restart adbd from root:
adb -s emulator-5554 root
And remount system:
adb -s emulator-5554 remount
It can be doned only once per run emulator. And any another remount can break write mode. Because of this you not need run of any other commands with remount, like mount -o remount,rw /system.
Another steps stay same - upload binary, run binary as daemon and so on.
Picture from AVD Android 7 x86 with root:
If you see error about PIE on execute su binary - then you upload to emulator wrong binary. You must upload binary named su.pie inside archive, but on emulator it must be named as su, not su.pie.
I believe that the easiest way is to create an alias for the command sh, e.g.
adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
Tested on Android Emulator 3.0 and higher.
A virtual device without "Play Store" should be used.
Note: You can either create one new or edit the settings of the existing one if you have some databases already inside the emulated device.
Once avd is created and is running Open terminal anywhere > in android studio or from start menu
Run adb root
Now you can use adb shell to open device shell window.
If your physical device with developer options is connected you will get message like "adb.exe: more than one device/emulator"
in this case you can use command 'adb -e shell'
Other useful note for beginners in adb shell:
Run 'ls' to see all the files.
cd to change directory.
some letters of the directory name+ TAB to auto complete the name.
'..' to go back.
I know this question is pretty old. But we can able to get root in Emulator with the help of Magisk by following https://github.com/shakalaca/MagiskOnEmulator
Basically, it patch initrd.img(if present) and ramdisk.img for working with Magisk.
Here my pack with all you need.
Or you can use this script:
echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=
echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause
%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b
I just replaced and assigned attributes for su to ~/Android/Sdk/system-images/android-22/google_apis/x86/system.img
and now on android 5 I always have root even for new systems, it’s enough to install SuperSu.apk
Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0
after that, SuperSu.apk sees root. But I do not update the binary file
I used part of the method from the solutions above; however, they did not work completely. On the latest version of Andy, this worked for me:
On Andy (Root Shell) [To get, right click the HandyAndy icon and select Term Shell]
Inside the shell, run these commands:
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
Then, install SuperSU and install SU binary. This will replace the SU binary we just created.
(Optional)
Remove SuperSU and install Superuser by CWM. Install the su binary again.
Now, root works!
I tried many of the above suggestions, including SuperSU and couldn't get any to work but found something much simpler that worked for my purposes. In my case, I only wanted to be able to run sqlite at the command prompt. I simply spun up an emulator with an older version of Android (Lollipop) and got root access immediately.
Use android image without PlayServices then you'll be able to run add root and access whatever you want.
https://github.com/newbit1/rootAVD save my life .
It root by Magisk
The script simple enough for user
I found that default API 23 x86_64 emulator is rooted by default.
Now i will let know the simplest way to root your emulator in few steps using 1 command.
Create or configure emulator.
Check by running your application that your emulator is working or not.
Open cmd and give the path of your sdk platform-tools like as below
C:\Users\XYZ>cd C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools
if you are not sure that where is your platform tools then goto android studio and open SDK Manager(Click the icon of sdk manager) there you will get the path of your sdk like this ==>C:\Users\XYZ\AppData\Local\Android\Sdk and add platform tools at the end like as below
C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools
Now follow step 3 i.e Open cmd and give the path of your sdk platform-tools like as below
C:\Users\XYZ>cd C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools
Step 4: C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools>adb root
Step 5: C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools>adb shell
Now you will get the success message as below:
C:\Users\XYZ\AppData\Local\Android\Sdk\platform-tools>adb root
adbd is already running as root
Step 6 : XYZ generic # cd data/data//databases/
sqlite3
.tables
.schema
Hope it will help. Its worked for me.