Page 2 of 4
Posted: Sat Jun 27, 2009 1:01 am
by onlinepcfun
dtm wrote:Making a quick calculator program to generate your password.
How can that be done? The nonce and callid changes with each register.
Thank you and Don't worry DTM...you were wonderful and did your magic...let netdata and Stewart take care of the rest...I know this can be 100% done as this was done previously and I know for sure what they are doing
Happy Birthday netdata and get well soon!
well
Posted: Sat Jun 27, 2009 1:24 am
by netdata
For now I was going to make a quick calculator just for testing
to make things easier.
It wouldn't actually be doing anything useful yet, but have to start somewhere.
PS For those following this thread, I don't mean to mislead anybody, this is just the first steps to a long and bumpy road, and its going to take a collaborative effort.
I have seen mention on another thread in about an unrelated topic,
the mention of an OpenWRT addon, now this is beyond my technical expertise, but I am going to try and pick their brains about how to go about making an addon, but first we need to find a way to do it.
Of course this would only help those running a linksys router with OpenWRT firmware AND an ATA device that may also have to be modified.
Right now, as dtm states, there is NO obvious way of doing this.
That might change, but for right now that is very true.
Im looking into piggybacking, injection, and other sneaky methods,
not as a final solution, but to hopefully gain some new insight.
dtm and stewart are the champs and they deserve all the credit,
without dtm we would still be in the dark. So kudos to them.
callid
Posted: Sat Jun 27, 2009 2:13 am
by netdata
If we can find a way to forecast the next callid, maybe using the cisco API
or look at a call right before a new call is initiated and use that data to generate what the next matching callid would be, then we can eliminate
at least one more wildcard...
Everything has an algorithm, once you know which method you can use
the algorithm to generate your own data, that's how crackers make keygens for software... there is always a way...
Posted: Sat Jun 27, 2009 9:21 am
by pancho1950
Happy birthday netdata
Posted: Sat Jun 27, 2009 1:09 pm
by los93sol
so by running this script I should be able to get my asterisk trunk for MJ running again?
Posted: Sat Jun 27, 2009 1:36 pm
by az1324
If you wanna play around with your ATAs here is a little proxy in .NET I threw together and it is tested and working though I didn't play much. This is not perfect cloaking but it does rewrite your User-Agent. Other things such as ports and Call-ID format are giveaways. Right now it seems to only work on listen port 5070 because the way BYE works apparently is to send to the port specified by the server and my proxy only listens/sends on one port for now. Use at your own risk.
http://www.mediafire.com/?mmmt4wcnqyb
wow
Posted: Sat Jun 27, 2009 1:46 pm
by netdata
You guys are sharp, I feel like a dum dum compared to how quick everyone else is.
I am trying to recruit some talent to make a OpenWRT addon.
The Cat & Mouse game is now ON.
Don't expect the first release to last long, as dtm stated, this
fix could be detected easily, they will likely change it, and
the use of any such fix could result in your MJ account being
permanently banned.
So just a quick caveat, use at your own risk.
Not to be a bringer of doom, but I guess if you are about
ready to leave MJ anyway, you have nothing to lose.
If I get banned I know I will be returning my MJ to the store.
Posted: Sat Jun 27, 2009 2:04 pm
by UncleRunkle
lol, netdata...you feel stupid? Think about the rest of us here. I need to learn coding and obviously a bunch of other things yet...
Now, let me get this straight...
So we can set up a program like the one az1324 made in .NET and then use it as a proxy to connect to the MagicJack servers. We would then set our ATAs to the address of the server running the .NET program.
If I am understanding correctly, then we could play cat and mouse easier at least...
And as far as OpenWRT, great thinking as I have a DD-WRT router myself. Might want to try DD-WRT as well or the Tomato guys. From what I understand (which isn't much) it should not be too difficult to implement the coding for this on the routers...
Posted: Sat Jun 27, 2009 5:00 pm
by jamoke
Is there a chance that these tweaks will work for Asterisk users? I can globally set my user-agent, but that's obviously only one piece of the puzzle.
not yet
Posted: Sat Jun 27, 2009 5:14 pm
by netdata
Not until one of us has a Eureka! moment, and sees some glaring hole to leap through.
Right now this is still early.
I wouldn't expect to see an Asterix patch for at least a month.
(Maybe that is being VERY optimistic tho)
I am sure almost all of us tinkering with this stuff work a full time job
or at least have a project occupying most of our time.
Posted: Sat Jun 27, 2009 7:32 pm
by az1324
You can run Asterisk through a proxy too... even a proxy on the same machine as Asterisk. Or if you know how to compile Asterisk and are somewhat familiar with the source it would be a pretty easy modification. It wouldn't be that hard to compile a proxy for OpenWRT. Also would be interesting to patch siphon for the iphone since it is open source.
As far as changing the algorithm, I'm fairly sure it isn't specified in the provisioning file so that would mean pushing out another update to everyone. I don't see them continually doing that. A more logical step is to start banning accounts. Doesn't seem unreasonable because you have to make a considerable effort to sidestep this new protection. If we knew how the Call-ID was generated we could completely cloak the SIP part of the dongle. They could still cross reference with the provisioning calls, 911 and ad servers so that would have to be simulated for perfect emulation. Maybe it's worth the effort if you are using it heavily on a mobile device like iphone. As for me I'm probably going to stick to thin client and sipgate+GVoice for now.
Posted: Sat Jun 27, 2009 11:48 pm
by srvctek
Stupid? Your brilliant compared to me when it comes to this stuff. My bag is hacking a few other things i cant mention on here.

Posted: Sun Jun 28, 2009 12:29 pm
by jamoke
netdata / az1324
What I've done for now is install MJ on an HP Thin Client and feed the dial tone back into Asterisk through an FXO port. I don't like the D to A to D conversion process, but for now it works. I forward my MJ incoming calls to the DID of another SIP provider, thus allowing me to maintain the D to D connection of inbound calls.
It's a simple workaround as the Thin Client is a headless device that sits on my network, consuming about 14 watts.
Posted: Sun Jun 28, 2009 3:20 pm
by UncleRunkle
Guys, just let me know how I can help. I feel helpless. I'm pretty knowledgeable so feel free to ask me if I can do something. That's all, thanks!
Posted: Sun Jun 28, 2009 3:44 pm
by hesantos2004
hello az1324. this program works great. is there a way you can edit the program to remember the proxy and password because i'm trying to run it as a service but it forgets the proxy and password.
Posted: Sun Jun 28, 2009 5:14 pm
by mel2000
UncleRunkle wrote:So we can set up a program like the one az1324 made in .NET and then use it as a proxy to connect to the MagicJack servers. We would then set our ATAs to the address of the server running the .NET program.
I'd like to get an answer to that question. Subsequent posts imply that more programming assistance is required to solve the ATA problem. What exactly can az1234's program do for users NOW?
Posted: Sun Jun 28, 2009 6:53 pm
by az1324
hesantos2004 wrote:hello az1324. this program works great. is there a way you can edit the program to remember the proxy and password because i'm trying to run it as a service but it forgets the proxy and password.
Ok here you go. If you save your settings next time you run it it will start minimized to system tray and automatically start the proxy.
http://www.mediafire.com/?mmmt4wcnqyb
Posted: Sun Jun 28, 2009 9:55 pm
by MJuser909909
As far as a proxy and asterisk go:
Where do the nonce and the callid values come from? I mean I know where to find them, in memory, but arent they transmitted from talk4free.net? And if so, cant our 'smart' proxy automatically change those values when new ones are rcvd?
Posted: Sun Jun 28, 2009 10:11 pm
by hesantos2004
thank's az1324 your program it's very helpful man. i got MJ and your program both running as services now.
Posted: Mon Jun 29, 2009 1:43 am
by az1324
Ok some people want more info on the proxy I made so here are some facts.
This is an sip-only proxy. It doesn't proxy the RTP stream so you should run it on the same LAN as your ATA.
You would setup your ATA the same way you did normally in the past for MJ but instead of the proxy address and port you would put the address of your computer running the proxy and the Listen Port. On the proxy itself you would put the proxy address that you normally would have put in the ATA, the Forward Port (5070), and also your MJ password.
Remember this is just something I threw together to experiment so use at your own risk.
Posted: Mon Jun 29, 2009 1:51 am
by richardtaur
I see now. So, we still need to leave the computer on 24x7 in order to have ATA working.
Thank you for the instruction. ^_^
Posted: Mon Jun 29, 2009 7:22 am
by samdaman
az1324 wrote:Ok some people want more info on the proxy I made so here are some facts.
This is an sip-only proxy. It doesn't proxy the RTP stream so you should run it on the same LAN as your ATA.
You would setup your ATA the same way you did normally in the past for MJ but instead of the proxy address and port you would put the address of your computer running the proxy and the Listen Port. On the proxy itself you would put the proxy address that you normally would have put in the ATA, the Forward Port (5070), and also your MJ password.
Remember this is just something I threw together to experiment so use at your own risk.
Can you create a linux version for ubuntu?
Posted: Mon Jun 29, 2009 9:35 am
by mel2000
az1324 wrote:you would put the address of your computer running the proxy and the Listen Port.
How would I determine the listen port on the computer running the proxy?
Posted: Mon Jun 29, 2009 10:53 am
by magicnick
mel2000 wrote:az1324 wrote:you would put the address of your computer running the proxy and the Listen Port.
How would I determine the listen port on the computer running the proxy?
run it the same way as if you had caller id program on one computer and a ata. if not sure you can check some older posts on this forum.
nick
sunrocket
Posted: Mon Jun 29, 2009 10:56 am
by magicnick
anyone have the old firmware for a sunrocket spa 2102
Posted: Mon Jun 29, 2009 12:14 pm
by dtm
Anybody else notice that domingo and gooney evaporated once we proved the certs and encryption were disinformation? Do you think they were working for Danny B?
Posted: Mon Jun 29, 2009 2:47 pm
by jamoke
The proxy will run under Windows XP Pro, but I get an error when I try to execute it under XP Embedded, which would be the preferred low-power box to run the proxy. Any thoughts? The error that I receive is:
The application failed to initialize properly (0xc0000135)
Thanks
Posted: Mon Jun 29, 2009 3:39 pm
by magicnick
jamoke wrote:The proxy will run under Windows XP Pro, but I get an error when I try to execute it under XP Embedded, which would be the preferred low-power box to run the proxy. Any thoughts? The error that I receive is:
The application failed to initialize properly (0xc0000135)
Thanks
you need to install the .NET framework
Nick
Posted: Mon Jun 29, 2009 4:07 pm
by rusabus
AZ1324 -
Thanks for the .net proxy application. I'm currently running Asterisk on Linux without an X server. I use mono to run .net applications, but without an X server, your proxy app won't run (presumably because it depends on the presence of a GUI).
Can you write a version that runs from the CLI and reads a config file instead? I hate to ask for specific requests like this, but it would be a big help.
To all those who want an OpenWRT port:
Making .net software run on OpenWRT is not *impossible*, but nearly so. In order to make it run, you would need a mips version of mono. According to the mono website, mono will run on mips, but I've never been able to make it happen. If someone can generate a mono package for OpenWRT, then running this .net application should be automatic (provided a non-GUI version can be written). Otherwise, the software would have to be re-written without .net.
Posted: Mon Jun 29, 2009 4:22 pm
by steroids
rusabus wrote:AZ1324 -
Thanks for the .net proxy application. I'm currently running Asterisk on Linux without an X server. I use mono to run .net applications, but without an X server, your proxy app won't run (presumably because it depends on the presence of a GUI).
Can you write a version that runs from the CLI and reads a config file instead? I hate to ask for specific requests like this, but it would be a big help.
To all those who want an OpenWRT port:
Making .net software run on OpenWRT is not *impossible*, but nearly so. In order to make it run, you would need a mips version of mono. According to the mono website, mono will run on mips, but I've never been able to make it happen. If someone can generate a mono package for OpenWRT, then running this .net application should be automatic (provided a non-GUI version can be written). Otherwise, the software would have to be re-written without .net.
He'll need to change out the reading/writing of the ini files to use pure .NET rather than native calls.
The application does run fine under linux (assuming you have X installed/running)
You cannot save the config file however. Trying to do so just crashes the app:
Code: Select all
andy@deathstar> mono MJMD5.exe
System.DllNotFoundException: kernel32
at (wrapper managed-to-native) Ini.IniFile:WritePrivateProfileString (string,string,string,string)
at Ini.IniFile.IniWriteValue (System.String Section, System.String Key, System.String Value) [0x00000]
at MJMD5.MJMD5.SaveSettings () [0x00000]
at MJMD5.MJMD5.StartProxy (System.String LPort, System.String FPort, System.String Proxy) [0x00000]
at MJMD5.MJMD5.button1_Click (System.Object sender, System.EventArgs e) [0x00000]
at System.Windows.Forms.Control.OnClick (System.EventArgs e) [0x00000]
at System.Windows.Forms.Button.OnClick (System.EventArgs e) [0x00000]
at System.Windows.Forms.ButtonBase.OnMouseUp (System.Windows.Forms.MouseEventArgs mevent) [0x00000]
at System.Windows.Forms.Button.OnMouseUp (System.Windows.Forms.MouseEventArgs mevent) [0x00000]
at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.ButtonBase.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Button.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000]
at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00000]
andy@deathstar>
A pure .NET CLI implementation would be nice. Then it can be run cross platform under mono. It would also allow it to run as a service for those running windows.
Posted: Mon Jun 29, 2009 8:20 pm
by az1324
Ok you crazy cats here's the command line version. I didn't really test it.
http://www.mediafire.com/?cjztj0ug4xl
This isn't exactly a complicated program so it really would be better to just write one for the platform you want to run it on.
Post source code
Posted: Mon Jun 29, 2009 11:37 pm
by corb69
Could you post the code of your application.
I will be able to convert it to java.
Then we could have a solution that is multi plateform.
Posted: Mon Jun 29, 2009 11:55 pm
by rusabus
I have been successful using the CLI version of az1324's application. It is running using Mono on the asterisk server. I then pointed Asterisk to 127.0.0.1 and everything registered. I can also make inbound and outbound calls now.
Thanks!
Posted: Tue Jun 30, 2009 12:23 am
by srvctek
dtm wrote:Anybody else notice that domingo and gooney evaporated once we proved the certs and encryption were disinformation? Do you think they were working for Danny B?
You do have a good point, I noticed too

Posted: Tue Jun 30, 2009 9:59 am
by jamoke
rusabus,
Do you know if mono will run under CentOS?
Posted: Tue Jun 30, 2009 2:13 pm
by MJuser909909
Hey az,
Proxy works great, running the command line version using mono on a freebsd box, love it.
Is there any options for verbose output? Or log file usage?
Also, can u make a program which will fully emulate the dongle? IE: hit the 911.talk4free.com, provision.talk4free.com etc.. So that way it looks like were actually running the dongle?
Would u be willing to release ur source so others could experiment?
Either way, thanks
Posted: Tue Jun 30, 2009 2:20 pm
by RonV
jamoke wrote:rusabus,
Do you know if mono will run under CentOS?
I checked the yum respositories for trixbox which is centos based and came up with these:
Code: Select all
mod_mono.i386 1.2.1-1.el5.centos extras
mono-basic.i386 1.0.6-1.el5.rf rpmforge
mono-complete.i386 1.0.6-1.el5.rf rpmforge
mono-core.i386 1.2.4-2.el5.centos extras
mono-data.i386 1.2.4-2.el5.centos extras
mono-data-firebird.i386 1.2.4-2.el5.centos extras
mono-data-oracle.i386 1.2.4-2.el5.centos extras
mono-data-postgresql.i386 1.2.4-2.el5.centos extras
mono-data-sqlite.i386 1.2.4-2.el5.centos extras
mono-data-sybase.i386 1.2.4-2.el5.centos extras
mono-devel.i386 1.2.4-2.el5.centos extras
mono-extras.i386 1.2.4-2.el5.centos extras
mono-jscript.i386 1.2.4-2.el5.centos extras
mono-locale-extras.i386 1.2.4-2.el5.centos extras
mono-nunit.i386 1.2.4-2.el5.centos extras
mono-nunit-devel.i386 1.2.4-2.el5.centos extras
mono-web.i386 1.2.4-2.el5.centos extras
mono-winforms.i386 1.2.4-2.el5.centos extras
So from what I can tell yes mono will run under centos. I am going to try it tonight.
Posted: Tue Jun 30, 2009 3:28 pm
by ameir
This is an awesome app!
If you could post the source that would be great! I want to rewrite it in C and have it load on startup on my Asterisk server so that it can register to itself. If you don't want to share the source, could you at least give us details the algorithm?
Whoever figured this out is the man.
Posted: Tue Jun 30, 2009 3:55 pm
by teddy_b
ameir,
All the details with the exact algorithm are on the page 3 of this thread,
dtm's post. There's really nothing else you can get from the az1324 sources.
But I just wrote the same thing in plain C last night, and it's running on my linux-based router already along with the Asterisk server

. Can be compiled for any other Linux distribution of course. I'll post it later when I get back home tonight - unless of course someone else beats me to it - it's really not a complex app to write.
running the script on asterisk
Posted: Tue Jun 30, 2009 4:45 pm
by jjanton
Rusabus,
Could you give me a rundown on how you configured the .Net app to run?
That would be a great help.
I "yummed" Mono on my Trixbox today and want to know how the rest integrates..
Thanks!
Posted: Tue Jun 30, 2009 4:49 pm
by rusabus
jamoke wrote:rusabus,
Do you know if mono will run under CentOS?
I'm running CentOS, but I installed mono from sources, not from an RPM. The mono webpage has an easy-to-use installer.
Code: Select all
[cmpc.lan ~]# /opt/mono/bin/mono -V
Mono JIT compiler version 1.9.1 (tarball)
Copyright (C) 2002-2007 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
GC: Included Boehm (with typed GC)
SIGSEGV: normal
Notifications: epoll
Architecture: x86
Disabled: none
I installed in /opt/mono (not that it matters) and copied the .net proxy tool to /etc/asterisk (again, not that it matters).
Then, in /etc/rc.local, I added the following line:
Code: Select all
/opt/mono/bin/mono /etc/asterisk/MJMD5CL.exe proxy01.saltlakecity.talk4free.com 5070 5070 <my password> &
Finally, in trixbox, I used the following configuration:
under Outgoing Peer details:
Code: Select all
context=from-trunk
username=E<my phone number>01
type=peer
secret=<my password>
host=127.0.0.1
port=5070
nat=yes
insecure=very
fromuser=E<my phone number>01
dtmfmode=inband
qualify=2000
Here is my registration string:
Code: Select all
E<my phone number>01:<my password>@127.0.0.1:5070
I was amazed when it worked on the first try! It took about 1 full minute before it was able to receive incoming calls, but outgoing worked immediately.
FWIW: the only reason that I used the installer is that I have a .net application that is very particular with mono versions. It seems like every time I upgrade mono, my other application breaks. Using an RPM presents the risk that mono could be upgraded at any time, and I didn't want that. The most current mono installer is found here
http://ftp.novell.com/pub/mono/archive/ ... taller.bin.
For this application, you could probably just do a yum install mono-core and it would work, but I haven't tested that.
Using Proxy with multiple MJ's
Posted: Tue Jun 30, 2009 5:05 pm
by craigm1
I have 2 Linksys Pap2 and 4 Magic Jack's has anybody tested this with multiple Magic Jack's
Craig
Posted: Tue Jun 30, 2009 6:44 pm
by lowno
Is there any possibility to have it run with multiple MJ's? I guess I will be installing mono on my trixbox.
Thanks.
Posted: Tue Jun 30, 2009 6:56 pm
by RonV
Thanks rusabus,
So far I have reinstated by magicJack trunk in Trixbox but pointed it do my PC running the .net proxy for now. I didn't want to play around with mono yet. Also there is someone else here that looks like they are compiling C code native for linux which would remove the need for mono.
Darn and I just spent $100 bucks on a two port FXO card and got that working yesterday and now I am back to jack less magicJack...oh well if the proxy stops working I alway have a backup via the FXO card.
But its great having the better sound quality and call control that Asterisk gives vs. the magicJack dongle.
Posted: Tue Jun 30, 2009 7:17 pm
by az1324
teddy_b wrote:ameir,
All the details with the exact algorithm are on the page 3 of this thread,
dtm's post. There's really nothing else you can get from the az1324 sources.
But I just wrote the same thing in plain C last night, and it's running on my linux-based router already along with the Asterisk server

. Can be compiled for any other Linux distribution of course. I'll post it later when I get back home tonight - unless of course someone else beats me to it - it's really not a complex app to write.
That's what I've been saying. Your source will be more useful than mine so I'll defer to you on that.
Posted: Tue Jun 30, 2009 8:39 pm
by teddy_b
Ok, here's the plain C version of the simple MJ proxy:
http://www.mediafire.com/file/yzwmjzotm ... y.c.tar.gz.
It works exactly the same as the az1324's app - the only difference is that it doesn't need mono to run on Linux - can be compiled for [almost] any linux distribution, including embedded systems like OpenWRT.
Of course, you need to know how to compile applications from sources for your linux system. You can create a Makefile, or just run gcc to compile it, somethig like:
gcc -o mjproxy md5.c mjproxy.c
Run it using the following command:
mjproxy listen-ip(can use 0.0.0.0) listen-port your-preferred-mj-proxy-server-addr mj-proxy-port(should be 5070) your-mj-password
The listen port should also be 5070 for incoming calls to work, however outgoing should work with any listen port.
Then configure your client the same way as you did for
az1324's proxy - specify the listening IP and port of the proxy as the outbound proxy on your ATA or * trunc. Just remember not to expose this proxy to the Internet without additional protection, as anybody who can connect to it will only need to know your MJ phone number to be able to register and make calls using your MJ account.
You can modify the app as you wish - clean up the mess in my code (I've been doing .NET stuff for too long), add more console output or logging, add support for config file, make it to replace user-agent, etc etc... But I suggest you don't spend too much time on it - MJ seems to be determined to screw up any attempts to use MJ service without the dongle, so I bet it's not going to last long... And the next time
dtm may not be around to discover the changed algorithm, or it will take someone too long to figure it out...
Posted: Tue Jun 30, 2009 8:52 pm
by vMAC
Any progress on getting this to run as a service/ addon for OpenWRT?
Posted: Tue Jun 30, 2009 8:57 pm
by MJuser909909
wonderful!
Thanks
Posted: Tue Jun 30, 2009 9:07 pm
by teddy_b
vMAC wrote:Any progress on getting this to run as a service/ addon for OpenWRT?
Well... Did you read the post above yours

? Just compile it using OpenWRT toolchain, and you're good to go...
Posted: Tue Jun 30, 2009 11:07 pm
by samdaman
teddy_b wrote:Ok, here's the plain C version of the simple MJ proxy:
http://www.mediafire.com/file/yzwmjzotm ... y.c.tar.gz.
It works exactly the same as the az1324's app - the only difference is that it doesn't need mono to run on Linux - can be compiled for [almost] any linux distribution, including embedded systems like OpenWRT.
Of course, you need to know how to compile applications from sources for your linux system. You can create a Makefile, or just run gcc to compile it, somethig like:
gcc -o mjproxy md5.c mjproxy.c
Run it using the following command:
mjproxy listen-ip(can use 0.0.0.0) listen-port your-preferred-mj-proxy-server-addr mj-proxy-port(should be 5070) your-mj-password
Then configure your client the same way as you did for
az1324's proxy - specify the listening IP and port of the proxy as the outbound proxy on your ATA or * trunc. Just remember not to expose this proxy to the Internet without additional protection, as anybody who can connect to it will only need to know your MJ phone number to be able to register and make calls using your MJ account.
You can modify the app as you wish - clean up the mess in my code (I've been doing .NET stuff for too long), add more console output or logging, add support for config file, make it to replace user-agent, etc etc... But I suggest you don't spend too much time on it - MJ seems to be determined to screw up any attempts to use MJ service without the dongle, so I bet it's not going to last long... And the next time
dtm may not be around to discover the changed algorithm, or it will take someone too long to figure it out...
Thank you and to all those who contributed
Works perfect calling out but incoming goes straight to vm
